From 1649aa007e25dbfce1540c0bfe898f053fed478f Mon Sep 17 00:00:00 2001 From: Gregory John Casamento Date: Sat, 30 Nov 2002 00:49:55 +0000 Subject: [PATCH] Adding NSTabView inspector submitted by Fabien Vallon git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/gorm/trunk@15185 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 11 +- GormDocument.h | 1 + GormDocument.m | 58 ++++- Palettes/3Containers/GNUmakefile | 3 +- .../GormTabViewInspector.gorm/data.classes | 154 +++++++++++++ .../GormTabViewInspector.gorm/objects.gorm | Bin 0 -> 3866 bytes Palettes/3Containers/inspectors.m | 207 +++++++++++++++++- 7 files changed, 422 insertions(+), 12 deletions(-) create mode 100644 Palettes/3Containers/GormTabViewInspector.gorm/data.classes create mode 100644 Palettes/3Containers/GormTabViewInspector.gorm/objects.gorm diff --git a/ChangeLog b/ChangeLog index 66125ea3..db7550c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,17 @@ +2002-11-29 Gregory John Casamento + + * NOTE: Added a patch submitted by Fabien Vallon to + add tab view inspector. Thanks. + * Palettes/3Containers/GormTabViewInspector.gorm: added. + * Palettes/3Containers/inspectors.m: Patched. + * Palettes/3Containers/GNUmakefile: Patched. + 2002-11-24 Gregory John Casamento * NOTE: Added a patch submitted by Fabien Vallon to add functionality to the combo box inspector. Thanks. * Palettes/4Data/GormNSComboBoxInspector.gorm: added. - * Palettes/4Data/inspectors.m: Patched. - + * Palettes/4Data/inspectors.m: Patched. 2002-11-24 Gregory John Casamento diff --git a/GormDocument.h b/GormDocument.h index 287a9a40..82c14195 100644 --- a/GormDocument.h +++ b/GormDocument.h @@ -117,6 +117,7 @@ - (BOOL) removeConnectionsWithLabel: (NSString *)name forClassNamed: (NSString *)className isAction: (BOOL)action; +- (BOOL) removeConnectionsForClassNamed: (NSString *)name; @end #endif diff --git a/GormDocument.m b/GormDocument.m index 77d84191..d94f0a29 100644 --- a/GormDocument.m +++ b/GormDocument.m @@ -1633,6 +1633,7 @@ static NSImage *classesImage = nil; { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSMutableDictionary *nt; + NSMutableDictionary *cc; NSData *data; NSUnarchiver *u; GSNibContainer *c; @@ -1642,7 +1643,7 @@ static NSImage *classesImage = nil; NSFileManager *mgr = [NSFileManager defaultManager]; BOOL isDir = NO; NSDirectoryEnumerator *dirEnumerator; - + if([mgr fileExistsAtPath: aFile isDirectory: &isDir]) { // if the data is in a directory, then load from objects.gorm in the directory @@ -1709,8 +1710,14 @@ static NSImage *classesImage = nil; } // retrieve the custom class data... - [classManager setCustomClassMap: [[c nameTable] objectForKey: @"GSCustomClassMap"]]; + cc = [[c nameTable] objectForKey: @"GSCustomClassMap"]; + if(cc == nil) + { + cc = [NSMutableDictionary dictionary]; // create an empty one. + } + [classManager setCustomClassMap: cc]; + // convert from old file format... if(isDir == NO) { if (![classManager loadCustomClasses: [[aFile stringByDeletingPathExtension] @@ -2788,6 +2795,44 @@ static NSImage *classesImage = nil; return removed; } +- (BOOL) removeConnectionsForClassNamed: (NSString *)className +{ + NSEnumerator *en = [connections objectEnumerator]; + id c = nil; + BOOL removed = YES; + int retval = -1; + NSString *title = [NSString stringWithFormat: @"Modifying Class"]; + NSString *msg = [NSString stringWithFormat: + @"This will break all connections to actions/outlets to instances of class '%@'. Continue?", + className]; + + // ask the user if he/she wants to continue... + retval = NSRunAlertPanel(title,msg,@"OK",@"Cancel",nil,nil); + if(retval == NSAlertDefaultReturn) + { + removed = YES; + } + else + { + removed = NO; + } + + // remove all. + while((c = [en nextObject]) != nil) + { + // check both... + if([[[c source] className] isEqualToString: className] || + [[[c destination] className] isEqualToString: className]) + { + [self removeConnector: c]; + } + } + + // done... + NSDebugLog(@"Removed references to actions/outlets for objects of %@", className); + return removed; +} + // --- NSOutlineView dataSource --- - (id) outlineView: (NSOutlineView *)anOutlineView objectValueForTableColumn: (NSTableColumn *)aTableColumn @@ -2886,8 +2931,13 @@ objectValueForTableColumn: (NSTableColumn *)aTableColumn { if(![anObject isEqualToString: @""]) { - [classManager renameClassNamed: item newName: anObject]; - [gov reloadData]; + BOOL removed = [self removeConnectionsForClassNamed: item]; + if(removed) + { + [classManager renameClassNamed: item newName: anObject]; + [self detachObject: [self objectForName: item]]; + [gov reloadData]; + } } } [gov setNeedsDisplay: YES]; diff --git a/Palettes/3Containers/GNUmakefile b/Palettes/3Containers/GNUmakefile index ecc2d0c6..37950d08 100644 --- a/Palettes/3Containers/GNUmakefile +++ b/Palettes/3Containers/GNUmakefile @@ -45,7 +45,8 @@ PALETTE_NAME = 3Containers GormBrowserInspector.gorm \ GormTableViewInspector.gorm \ GormTableColumnInspector.gorm \ - GormTableColumnSizeInspector.gorm + GormTableColumnSizeInspector.gorm \ + GormTabViewInspector.gorm -include GNUmakefile.preamble diff --git a/Palettes/3Containers/GormTabViewInspector.gorm/data.classes b/Palettes/3Containers/GormTabViewInspector.gorm/data.classes new file mode 100644 index 00000000..8b163d51 --- /dev/null +++ b/Palettes/3Containers/GormTabViewInspector.gorm/data.classes @@ -0,0 +1,154 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "changeFont:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:" + ); + Super = NSObject; + }; + GormTabViewInspector = { + Actions = ( + ); + Outlets = ( + typeMatrix, + numberOfItemsField, + allowtruncate + ); + Super = IBInspector; + }; +} \ No newline at end of file diff --git a/Palettes/3Containers/GormTabViewInspector.gorm/objects.gorm b/Palettes/3Containers/GormTabViewInspector.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..1aeb37d8402ca0aca6d11c1e99e683f92c2f49ed GIT binary patch literal 3866 zcmcInTX)+;5MIfSo!HLRv0K_gT%d&jg;D4w4VT7oNE#qcsL~7N(#nq7ipr9YEjR63 zpEx|~`_1gk?t1lR+cTRbqg8)oJuv}) z3s>RN5)}Zn#a`j^Dm>0Zln9%75a?dPyKQXmNx)$E~G zNOnhP$ZXU#tFF7P#*R_DWtn>$PP>U%+!l3E*&z^IlYU|d5{MN5mZs!lAlTw6Abid0o6<+3&=vQ_1Ydt|Unj zG^_B7#q3H_h-~GK5XEfeEEdbpu~^Jfw|vE#Re_J9DiWXX!Yvm#y9 z!z#1J`XHm_h;Bw+F>MArPHkmrm8flk77*41WSNXYL`Fd^+qSz`@>(6IZg^(NHfpBb zhMYD@+BX`;Llc*vAYd3DroHYq8m@Cs-?O~>qpb%IU_zTBjcdpu4pRk8@}RLuneHSmIM3C|2>YaZaKVl$l}tqt6kPG_@QQcLr{0=n+PhHD zrpbw-2EyKVqVhlFM87^qCtCS~oX8(^qNrI?5_6(rHzSuX*9j-I88I1C)AxXrj4m6k zDXVUHW~1bE8a1=!2NN$zdY@(X=g0f$Y`GnWXMs1n`QTJ=8s1{@xEqqV zR7F(!`!L5M8JaOeu9-=S9bt;6!V_!4!jdg^g$AXr#4LAxCEqvLeKOdeLk0_*2Mu=i zfWhAG&cHhiK#7*5s0%TJpl`(Y>Meuu) z;B)Xkiyuxf0!4!7StJ*&FQ-N^{kG-62ih#fV=V5v6mZr4#=u$>Mt>v9{}$5m5;Pa? zmR0Isom&?0VRuxvQB0=3F!+X}j%bcsX9i>PM{J!W`9TscXaz#HXrJ+Im9tO<(^_>#v(>VnKB19U!akP!o^{;$5R(v>gM1w%fwwDjv%4u^pZ?o zAu%!F>&K7)S6CN@`^B&n3*#xtE3Hj}Nx@aNQc5N(SVFL$g~JXHmj4rAa3Q$j2a9Md zLLyTOV}j37_ZP1~_W)O+hbaF3(Yn7x-Pd}$VOeI!GFRnxlksvii4oEg4o1p*__jpt zWeAeldjMMBj3G$%IFKs{vhoTD>Z_HdP(Il=|!G8}!7$=P20({3oBu7Cc2RF1L9r*di<;Xh?whIx=gU*wrqu?6d zj(phZ7K3ff8#nPgi{D%Lox|^K?Sz<>(`|J;+r&eS6Q5KMw&4y>E6+Ca(v?xYXHApw z!S~upQ3&zS-DhBixj=`zJcCTQa)yM8$7uMWdotJ#^x!W1*gb*YdH89V1~w%8EG6dP z9!tzbYn)N}^tttbj-qWoDc{G{rEztJ9F>L|j~b6gjjIM-UBa6S)DcP=k?tOf^j{f- BSs(xa literal 0 HcmV?d00001 diff --git a/Palettes/3Containers/inspectors.m b/Palettes/3Containers/inspectors.m index c3ea0a8c..bd8ec1b3 100644 --- a/Palettes/3Containers/inspectors.m +++ b/Palettes/3Containers/inspectors.m @@ -27,7 +27,7 @@ #include "../../GormPrivate.h" #import "GormNSTableView.h" - +#import "../../GormInternalViewEditor.h" /* This macro makes sure that the string contains a value, even if @"" */ #define VSTR(str) ({id _str = str; (_str) ? _str : @"";}) @@ -496,12 +496,12 @@ { [verticalScrollerSwitch setEnabled: YES]; [verticalScrollerSwitch setState: - ([scrollView hasVerticalScroller]) ? NSOnState : NSOffState]; + ([scrollView hasVerticalScroller]) ? NSOnState : NSOffState]; [horizontalScrollerSwitch setEnabled: YES]; [horizontalScrollerSwitch setState: - ([scrollView hasHorizontalScroller]) ? NSOnState : NSOffState]; - + ([scrollView hasHorizontalScroller]) ? NSOnState : NSOffState]; + [borderMatrix setEnabled: YES]; [borderMatrix selectCellWithTag: [scrollView borderType]]; } @@ -513,7 +513,7 @@ } [[rowsHeightForm cellAtIndex: 0] setIntValue: [anObject rowHeight] ]; - + [optionMatrix deselectAllCells]; if ([anObject drawsGrid]) [optionMatrix selectCellAtRow: 0 column: 0]; @@ -582,3 +582,200 @@ @implementation GormScrollViewAttributesInspector @end + +/*---------------------------------------------------------------------------- + * NSTabView (possibly embedded in a Scroll view) + */ + +static NSString *ITEM=@"item"; + +@implementation NSTabView (IBInspectorClassNames) + +- (NSString*) inspectorClassName +{ + return @"GormTabViewInspector"; +} + +- (NSString*) sizeInspectorClassName +{ + // return @"GormTableViewSizeInspector"; +} + +@end + +@interface GormTabViewInspector : IBInspector +{ + id typeMatrix; + int numberOfDisplayItem; + id allowtruncate; + id numberOfItemsField; +} + +- (void) _getValuesFromObject: (id)anObject; +- (void) _setValuesFromControl: (id)anObject; +@end + + +@implementation GormTabViewInspector + + +- (void) _setValuesFromControl: (id)control +{ + if (control == typeMatrix) + { + [object setTabViewType:[[control selectedCell] tag]]; + } + + if (control == allowtruncate) + { + BOOL flag; + flag = ([allowtruncate state] == NSOnState) ? YES : NO; + [object setAllowsTruncatedLabels:flag]; + } + + + if (control == numberOfItemsField) + { + int newNumber = [[numberOfItemsField stringValue] intValue]; + + //Can we allow stupid numbers like 66666666 ???????? + if (newNumber < 0) + { + [numberOfItemsField setStringValue:[NSString stringWithFormat:@"%i",[object numberOfTabViewItems]]]; + return; + } + if ( newNumber > [object numberOfTabViewItems] ) + { + int i; + NSTabViewItem *newTabItem; + for (i=([object numberOfTabViewItems]+1);i<=newNumber;i++) + { + NSString *identif = [NSString stringWithFormat:@"%i",i]; + newTabItem = [[NSTabViewItem alloc] initWithIdentifier:identif]; + [newTabItem setLabel:[ITEM stringByAppendingString:identif]]; + [newTabItem setView:[[NSView alloc] init]]; + [object addTabViewItem:newTabItem]; + } + } + else + { + int i; + for (i=([object numberOfTabViewItems]-1);i>=newNumber;i--) + { + [object removeTabViewItem:[object tabViewItemAtIndex:i]]; + } + } + + } + +// int newNumber = [itemStepper intValue]; +// NSTabViewItem *newTabItem; +// if ( newNumber > numberOfDisplayItem ) +// { +// NSString *identif = [NSString stringWithFormat:@"%i",newNumber]; +// newTabItem = [[NSTabViewItem alloc] initWithIdentifier:identif]; +// [newTabItem setLabel:[ITEM stringByAppendingString:identif]]; +// [newTabItem setView:[[NSView alloc] init]]; +// [object addTabViewItem:newTabItem]; +// [displayItemsField setStringValue:identif]; +// [labelField setStringValue: [ITEM stringByAppendingString:identif]]; +// [identifierField setStringValue:[ITEM stringByAppendingString:identif]]; +// numberOfDisplayItem = newNumber; +// } +// if ( newNumber < numberOfDisplayItem ) +// { +// NSLog(@"remove"); +// } + + + [object display]; +} + +- (void) _getValuesFromObject: anObject +{ +// BOOL isScrollView; +// id scrollView; + +// scrollView = //[[object superview] superview]; +// [object enclosingScrollView]; + +// isScrollView = [ scrollView isKindOfClass: [NSScrollView class]]; + +// if (anObject != object) +// { +// return; +// } + +// [selectionMatrix deselectAllCells]; +// if ([anObject gormAllowsMultipleSelection]) +// [selectionMatrix selectCellAtRow: 0 column: 0]; +// if ([anObject gormAllowsEmptySelection]) +// [selectionMatrix selectCellAtRow: 1 column: 0]; +// if ([anObject gormAllowsColumnSelection]) +// [selectionMatrix selectCellAtRow: 2 column: 0]; + +// if (isScrollView) +// { +// [verticalScrollerSwitch setEnabled: YES]; +// [verticalScrollerSwitch setState: +// ([scrollView hasVerticalScroller]) ? NSOnState : NSOffState]; + +// [horizontalScrollerSwitch setEnabled: YES]; +// [horizontalScrollerSwitch setState: +// ([scrollView hasHorizontalScroller]) ? NSOnState : NSOffState]; + +// [borderMatrix setEnabled: YES]; +// [borderMatrix selectCellWithTag: [scrollView borderType]]; +// } +// else +// { +// [verticalScrollerSwitch setEnabled: NO]; +// [horizontalScrollerSwitch setEnabled: NO]; +// [borderMatrix setEnabled: NO]; +// } + +// [[rowsHeightForm cellAtIndex: 0] setIntValue: [anObject rowHeight] ]; + +// [optionMatrix deselectAllCells]; +// if ([anObject drawsGrid]) +// [optionMatrix selectCellAtRow: 0 column: 0]; +// if ([anObject gormAllowsColumnResizing]) +// [optionMatrix selectCellAtRow: 1 column: 0]; +// if ([anObject gormAllowsColumnReordering]) +// [optionMatrix selectCellAtRow: 2 column: 0]; +// [[tagField cellAtIndex:0] setIntValue:[anObject tag]]; +} + +- (id) init +{ + if ([super init] == nil) + { + return nil; + } + + + if ([NSBundle loadNibNamed: @"GormTabViewInspector" owner: self] == NO) + { + NSLog(@"Could not gorm GormTableViewInspector"); + return nil; + } +// itemsViewArray=[[NSMutableArray alloc] initWithCapacity:2]; +// [itemsViewArray setArray: [NSArray arrayWithObjects:@"plop",@"plip",nil]]; +// numberOfDisplayItem = [itemsViewArray count]; +// [itemsViewArray retain]; + return self; +} + +- (void) ok: (id)sender +{ + [self _setValuesFromControl: sender]; +} + +- (void) setObject: (id)anObject +{ + [super setObject: anObject]; + [self _getValuesFromObject: anObject]; +} + +@end +