From d047746fcebd247e4fdfa232f0a32a19dbdcc850 Mon Sep 17 00:00:00 2001 From: Gregory John Casamento Date: Tue, 1 Jan 2008 02:24:35 +0000 Subject: [PATCH] Added code and gorm file to show inconsistencies in gorm files when they are detected. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/gorm/trunk@25813 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 12 +++ .../data.classes | 20 +++++ .../GormInconsistenciesPanel.gorm/data.info | Bin 0 -> 184 bytes .../objects.gorm | Bin 0 -> 2577 bytes .../GormPrefGeneral.gorm/data.classes | 7 +- English.lproj/GormPrefGeneral.gorm/data.info | Bin 184 -> 184 bytes .../GormPrefGeneral.gorm/objects.gorm | Bin 3664 -> 4426 bytes GNUmakefile | 1 + GormCore/GormGormWrapperLoader.m | 77 ++++++++++++++---- GormPrefs/GormGeneralPref.h | 4 +- GormPrefs/GormGeneralPref.m | 51 ++++++------ 11 files changed, 126 insertions(+), 46 deletions(-) create mode 100644 English.lproj/GormInconsistenciesPanel.gorm/data.classes create mode 100644 English.lproj/GormInconsistenciesPanel.gorm/data.info create mode 100644 English.lproj/GormInconsistenciesPanel.gorm/objects.gorm diff --git a/ChangeLog b/ChangeLog index 4c95a4b0..a03abe03 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2007-12-31 21:22-EST Gregory John Casamento + + * English.lproj/GormInconsistenciesPanel.gorm: Error panel to show + detected inconsistencies. + * English.lproj/GormPrefGeneral.gorm: Added option to turn on + repair method. + * GNUmakefile: Added reference to new gorm file. + * GormCore/GormGormWrapperLoader.m: Added code to bring up the + new panel and show the errors. + * GormPrefs/GormGeneralPref.[mh]: Added new method and ivar to + handle switch for consistency checking. + 2007-12-19 19:03-EST Gregory John Casamento * GormCore/GormGormWrapperLoader.m diff --git a/English.lproj/GormInconsistenciesPanel.gorm/data.classes b/English.lproj/GormInconsistenciesPanel.gorm/data.classes new file mode 100644 index 00000000..c4293162 --- /dev/null +++ b/English.lproj/GormInconsistenciesPanel.gorm/data.classes @@ -0,0 +1,20 @@ +{ + "## Comment" = "Do NOT change this file, Gorm maintains it"; + GormGormWrapperLoader = { + Actions = ( + ); + Outlets = ( + message, + textField, + panel + ); + Super = GormWrapperLoader; + }; + GormWrapperLoader = { + Actions = ( + ); + Outlets = ( + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/English.lproj/GormInconsistenciesPanel.gorm/data.info b/English.lproj/GormInconsistenciesPanel.gorm/data.info new file mode 100644 index 0000000000000000000000000000000000000000..aa4d5224dc609ac83fb74124e8ee9f5de5d68312 GIT binary patch literal 184 zcmZ?w3oR~5El@}-O3uhEOEmxjqvX^SD-Z(+j4>DnRtAiQj0_^~`9-;InK`KeMX71U zzKMB>>8V8wKw!wkz~L9{pOlrFTms@Vs4_4zF&Qu!GK0i}ONuh{(t)Ck3~E45S|@be_qL!En9ZtUkEXY!FG=wAef&>k;*PAAX99>2M*L)8q5ZHS0$}u za`TDvRt|Xvj;lA|$b0YroVn3Gv%8jL6KhLTJu^N1b$`=6Gl$LZ`@Zb1+r8E=&PxgS z+il7AJ_!Kg=SbL-kpN;J3}LXTL#yeW)IHa?9ar`kV_a~SYg$JqFJ#NdK4ZW|iWLs6 zZ_a)Dq$4eR$D;-+Lj@$Mwp3Adt$Mz-7h%BMkJ9fWs zUD(~OLPxX-ks}8zzvsB8q^JyK@1vNW$0p00*0;7RJ0j1rk*MrV(lU*MeJ)I9Hm&bu zzw5beW!zw7gaws~`Q(x@vsPlPV%GmfvHm+#Fe#-`F&k+dY&6iFv?#Dl)B3@Y7r6Eo z6KI(bR5N6mGyDv05F@ie02xtaQwe#sUeA6-%fu7~6nAypoI>W171Knw)#`bjPUH)} z3a7SC;b4QH|4=wTqB!bHJgj^{Z(?6^gCdC$PF|GQWD|GA=|(7Q2;~nnT}5R?`TG)4 zjulF6{R%uD9!HtfC zOqu%_&{Mnh>uJwBceRz6JPO2ow)o~!HRL?Z49ekDI1RJfP(Cq~SB8`m(Q;ad(Xg;c zF$GW-b40055S{H}p5-Y#*Tyr@bFHSFn8x7R>?O8^P)og zR+k+@Kng3`br!&aSfHr`#8*?aV1oAItsn8PPmV-V-LYmO2!gjNAc&ghMws0-*d)vU z)b=zx`!B_A74{!hABT!zPCTmW8Eeo}BP=7k+GSW2i*%$=k{&p+(?(CnGqwIgRRbx%f($f0%|Sa@!V+4V6c=BzC2hUj#Fl> z%2>E`BhMIV{1H8z8g&$0@jKSNooST`!Rr84D1Bj7J9I;Rtm&Cs>I2qQ6|BNLTK&c< zpdf6v+QQC%MM{6bwsV>Jo)uba>}32a<9@s->1+`fY~@3tJ-Uq7JQ z4mT=h6^S>WPEZOQELWLo6g!k*(La)cq!Lt`jvm&HztB$O4c6EDQD(q{Sa>LwSUI^n z8jeZ_yQeRZWy+AzF}1N7*wkSZ5+({f$>Rs`FkFNWw8rQ~dvt-X0{HMc2ZvtojQ+7%$mwgx+O@#1keh@UdEGY z5SpYM-7-1Y6)SYh>i3O{uNigBV`*%|-gPVZ0n&BNVnm2;gHBcEYUy zK0#rVMjne*Hm6J;~_f?uov#Yr(%t&IDRz6uNi%~jpwvFPGEnq8t#Rg@Y!IE kl43Z(^b delta 17 YcmdnNxPx(mD3gW7L~%bx#))Y`04p!5ZbJx&C+yUD|OXR=&Ik)PwBlgk|Ns)kd|{ApGa3TckcT!ccE~%;fPwss28`*rvmVA zx+qFB1OV`I09*?JfEh^e1RGq?3+86twj9H>M4d6FagFsB^wrJBqUhi^W1#U4*1w>y z>^R0|Md(5<^G?=ZXkF`KT?IWrU>ERg0y=m%OD*X4O{-+@Zis5FVmN|!cn@*USByqO z-!*DA$sM_M@?H`^cj~6KMTnA6&v^v9#_`dk74$X35*6OZdIC_=J3+@3AN}5t=iT@eb;n~+pFa=4D*vD#5`Jr z#FQ#@C9|^_rBX`@oFjfDtI9EgI-*bI;OMi{b=~NrWlw!7zwf&+q71-X7!4p8^T$!Y zaX(EYh9XUdS~RgVB!#{sEE(kq*FDID1NKT6Nc++#G83~Ia&}DyTb97*ZGI1z<>?@e zDA-Om`TdkX0uxH^iAc~1Ex#>_Pcj&C4HGM*Rou(iR_3;Cl)NE0?VlvfPH*BUBZupe z3K~JL!`NpcV^0Q<~>NdnPXWkT*QV_`+gL8_aEM~H1CN9MEiKN$zqJTFPQg?*Z zt?7H{$SS<4cE+Qfacx&NnH*;8R^8sQ6dicWpYSs9_K}3ntDU}xP@m?YO{EZ8BAuN5 z1;dgagwR0`4KDaH8Ds>@8l1Z&BUl#O-`gTMTn-{w*%Kr9ou(Rm@kKTGhc=?J2IF#T zT3l)(dYPZ58oXj)KW%Luw<+J&NbuZW2<9@aJfh`R9`81#-h2KiysxatT<`QNMb|;C zcn#5|soIZHVtLR)eX{7YSTBStG7vsEG7v!Rq{+oHZPHlgWUFckDenq#0j}_6h^9!)cv7@gf$P zsAQ7fCz@~YbAMuOp8FYRk%ge@!mSWk(w1F2W@*4a@Boz=?1dZ2-5`R{ScsVArdGf!6Ax3@ZvHe)}MlU{v!upwLcUai8{* zu&OpYqYBfh;nc&u9#}hcXWF{}>uM+NOV#hZ%Wy}TDn(;X3Uq#!;pC-eUJEB&c^P5M zTY-&ssRE^4xa*(wRDS_xU+CCdp7y5_ngz;>0$P+?VY#sp|RLvmP$O@$fvxEZFhvN9AAwcxEoNp**~=PkTREsH&>*&q;Y9T7`V zMrZ}4-%p~ z70<$)(W`OoxZLhI(Cdb!s|`wnU-45$K1m46Kj2S%L(?$nn;={8{iburaWJQ^oM0@f zwkX3H#InOIQd_@f-)ooac4Mb#HyVUSe}*vPzc~Sv$C;)Ga}FFB&RWc*;v zH<)nyx)95MNRDJkyA1wr#L`lq!l$z87xkHZ0b>f|fw(_PYxAFDE-*ix@_sXg4AX8u z9Crhrwvcv*WLS65?Mvaqz?3K9-+@^pqX^C@g0EmXIAdg}DGW~F-C!bh(me*JJeVGd z&?B4E!>?}b)LSs?4ss1%#T&X6QjxXYU6J;3{23a+M}bIMw#ws5ff3| zy{THKn?BV|xrs}o!Mw+e%iJ8!P)Q5kcBP^!sgJMSX*cRkJGoJ}_r>hUFx=4#0wXSkj77`0B--e!bsg?0Nb5yI~mu6C1!Cy=(zUpPtyP0%eXx*C=38><~rgd=&-tYj!l5!X> zWyhFVTd&nWDz=(Ud%Laf8)Kp(N)B9h$HWTV{~C>D8rSfX$atb8D)8n}M*AM4EBI|B z(Nh*BxQf3K#-)?N}?b&_0R= B9DD!( diff --git a/GNUmakefile b/GNUmakefile index 33026480..ab9c1f83 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -145,6 +145,7 @@ Gorm_LOCALIZED_RESOURCE_FILES = \ GormHelpInspector.gorm \ Gorm.gorm \ GormImageInspector.gorm \ + GormInconsistenciesPanel.gorm \ GormInspectorPanel.gorm \ GormObjectInspector.gorm \ GormNSSplitViewInspector.gorm \ diff --git a/GormCore/GormGormWrapperLoader.m b/GormCore/GormGormWrapperLoader.m index 2fd332fe..8934e442 100644 --- a/GormCore/GormGormWrapperLoader.m +++ b/GormCore/GormGormWrapperLoader.m @@ -36,6 +36,12 @@ #include @interface GormGormWrapperLoader : GormWrapperLoader +{ + NSMutableArray *_repairLog; + id message; + id textField; + id panel; +} @end @implementation GormGormWrapperLoader @@ -44,6 +50,44 @@ return @"GSGormFileType"; } +- (id) init +{ + if((self = [super init]) != nil) + { + _repairLog = [[NSMutableArray alloc] init]; + } + return self; +} + +- (void) dealloc +{ + RELEASE(_repairLog); + [super dealloc]; +} + +- (void) _openMessagePanel: (NSString *) msg +{ + NSEnumerator *en = [_repairLog objectEnumerator]; + id m = nil; + + if([NSBundle loadNibNamed: @"GormInconsistenciesPanel" + owner: self] == NO) + { + NSLog(@"Failed to open message panel..."); + } + else + { + [message setStringValue: msg]; + + while((m = [en nextObject]) != nil) + { + [textField insertText: m]; + } + + [panel orderFront: self]; + } +} + /** * The sole purpose of this method is to clean up .gorm files from older * versions of Gorm which might have some dangling references. This method @@ -80,7 +124,9 @@ if(sm == nil) { NSArray *menus = findAll(obj); - NSLog(@"Found and removed a dangling menu %@, %@.",obj,[document nameForObject: obj]); + [_repairLog addObject: + [NSString stringWithFormat: @"ERROR ==> Found and removed a dangling menu %@, %@.\n", + obj,[document nameForObject: obj]]]; [document detachObjects: menus]; [document detachObject: obj]; @@ -104,7 +150,9 @@ { id sm = [obj submenu]; - NSLog(@"Found and removed a dangling menu item %@, %@.",obj,[document nameForObject: obj]); + [_repairLog addObject: + [NSString stringWithFormat: @"ERROR ==> Found and removed a dangling menu item %@, %@.\n", + obj,[document nameForObject: obj]]]; [document detachObject: obj]; // if there are any submenus, detach those as well. @@ -133,21 +181,24 @@ { [document attachObject: v toParent: [v superview]]; name = [document nameForObject: v]; - NSLog(@"==> Found view %@ without an associated name, adding to the nametable as %@", v, name); + [_repairLog addObject: + [NSString stringWithFormat: + @"ERROR ==> Found view %@ without an associated name, adding to the nametable as %@\n", + v, name]]; if([v respondsToSelector: @selector(stringValue)]) { - NSLog(@"View string value is %@",[v stringValue]); + [_repairLog addObject: [NSString stringWithFormat: @"INFO: View string value is %@\n",[v stringValue]]]; } errorCount++; } - NSLog(@"Found view %@ with name %@", v, name); + [_repairLog addObject: [NSString stringWithFormat: @"INFO: Checking view %@ with name %@\n", v, name]]; } } } [document reactivateEditors]; /** - * Iterate over all connections... + * Iterate over all connections... remove connections with nil sources. */ en = [connections objectEnumerator]; while((con = [en nextObject]) != nil) @@ -156,14 +207,8 @@ { if([con source] == nil) { - NSLog(@"==> Removing bad connector with nil source: %@",con); - [document removeConnector: con]; - errorCount++; - } - - if([con destination] == nil) - { - NSLog(@"==> Removing bad connector with nil destination: %@",con); + [_repairLog addObject: + [NSString stringWithFormat: @"ERROR ==> Removing bad connector with nil source: %@\n",con]]; [document removeConnector: con]; errorCount++; } @@ -174,9 +219,7 @@ if(errorCount > 0) { errorMsg = [NSString stringWithFormat: @"%d inconsistencies were found, please save the file.",errorCount]; - NSRunAlertPanel(_(@"Warning"), - errorMsg, - nil, nil, nil); + [self _openMessagePanel: errorMsg]; } } diff --git a/GormPrefs/GormGeneralPref.h b/GormPrefs/GormGeneralPref.h index d29b0966..24e7ef9d 100644 --- a/GormPrefs/GormGeneralPref.h +++ b/GormPrefs/GormGeneralPref.h @@ -9,7 +9,7 @@ id window; id backupButton; id interfaceMatrix; - + id checkConsistency; id _view; } @@ -27,6 +27,8 @@ * Show the classes view as a browser or an outline. */ - (void) classesAction: (id)sender; + +- (void) consistencyAction: (id)sender; @end diff --git a/GormPrefs/GormGeneralPref.m b/GormPrefs/GormGeneralPref.m index 18e88d40..43c456b3 100644 --- a/GormPrefs/GormGeneralPref.m +++ b/GormPrefs/GormGeneralPref.m @@ -36,6 +36,7 @@ static NSString *BACKUPFILE=@"BackupFile"; static NSString *INTTYPE=@"ClassViewType"; +static NSString *REPAIRFILE=@"GormRepairFileOnLoad"; @implementation GormGeneralPref @@ -59,6 +60,7 @@ static NSString *INTTYPE=@"ClassViewType"; NSString *intType = [defaults stringForKey: INTTYPE]; [backupButton setState: [defaults integerForKey: BACKUPFILE]]; + [checkConsistency setState: ([defaults boolForKey: REPAIRFILE]?NSOnState:NSOffState)]; // set the interface matrix... if([intType isEqual: @"Outline"]) @@ -89,38 +91,35 @@ static NSString *INTTYPE=@"ClassViewType"; - (void) backupAction: (id)sender { - if (sender != backupButton) - return; - else - { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setInteger:[backupButton state] forKey:BACKUPFILE]; - } + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults setInteger:[backupButton state] forKey:BACKUPFILE]; } - (void) classesAction: (id)sender { - if (sender != interfaceMatrix) - return; - else + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + // NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + + if([[interfaceMatrix cellAtRow: 0 column: 0] state] == NSOnState) { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - // NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - - if([[interfaceMatrix cellAtRow: 0 column: 0] state] == NSOnState) - { - [defaults setObject: @"Outline" forKey: INTTYPE]; - } - else if([[interfaceMatrix cellAtRow: 1 column: 0] state] == NSOnState) - { - [defaults setObject: @"Browser" forKey: INTTYPE]; - } - - // let the world know it's changed. - // [nc postNotificationName: GormSwitchViewPreferencesNotification - // object: nil]; - + [defaults setObject: @"Outline" forKey: INTTYPE]; } + else if([[interfaceMatrix cellAtRow: 1 column: 0] state] == NSOnState) + { + [defaults setObject: @"Browser" forKey: INTTYPE]; + } + + // let the world know it's changed. + // [nc postNotificationName: GormSwitchViewPreferencesNotification + // object: nil]; + +} + +- (void) consistencyAction: (id)sender +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + [defaults setBool: (([checkConsistency state] == NSOnState)?YES:NO) + forKey: REPAIRFILE]; } @end