diff --git a/ProjectCenter/PCAppController+MenuHandling.h b/ProjectCenter/PCAppController+MenuHandling.h index 1432aa2..5737225 100644 --- a/ProjectCenter/PCAppController+MenuHandling.h +++ b/ProjectCenter/PCAppController+MenuHandling.h @@ -39,7 +39,6 @@ - (void)newProject:(id)sender; - (void)saveProject:(id)sender; - (void)saveProjectAs:(id)sender; -- (void)showLoadedProjects:(id)sender; - (void)saveFiles:(id)sender; - (void)revertToSaved:(id)sender; diff --git a/ProjectCenter/PCAppController+MenuHandling.m b/ProjectCenter/PCAppController+MenuHandling.m index d68803b..76ca1ca 100644 --- a/ProjectCenter/PCAppController+MenuHandling.m +++ b/ProjectCenter/PCAppController+MenuHandling.m @@ -72,11 +72,6 @@ [menuController saveProjectAs:sender]; } -- (void)showLoadedProjects:(id)sender -{ - [menuController showLoadedProjects:sender]; -} - - (void)saveFiles:(id)sender { [menuController saveFiles:sender]; diff --git a/ProjectCenter/PCAppController.m b/ProjectCenter/PCAppController.m index 81a6bda..ca4c1fa 100644 --- a/ProjectCenter/PCAppController.m +++ b/ProjectCenter/PCAppController.m @@ -29,6 +29,9 @@ #import +#define REL_LIB_PC @"Library/ProjectCenter" +#define ABS_LIB_PC @"/usr/GNUstep/Local/Library/ProjectCenter" + @implementation PCAppController //============================================================================ @@ -43,10 +46,10 @@ NSString *_bundlePath; if (prefix && ![prefix isEqualToString:@""]) { - _bundlePath = [prefix stringByAppendingPathComponent:@"Library/ProjectCenter"]; + _bundlePath = [prefix stringByAppendingPathComponent:REL_LIB_PC]; } else { - _bundlePath = [NSString stringWithString:@"/usr/GNUstep/Local/Library/ProjectCenter"]; + _bundlePath = [NSString stringWithString:ABS_LIB_PC]; } [defaults setObject:_bundlePath forKey:BundlePaths]; @@ -59,14 +62,13 @@ [defaults setObject:[NSString stringWithFormat:@"%@/ProjectCenterBuildDir",NSTemporaryDirectory()] forKey:RootBuildDirectory]; - /* - [defaults setBool:YES forKey:PromtOnClean]; - [defaults setBool:YES forKey:PromtOnQuit]; - [defaults setBool:YES forKey:AutoSave]; - [defaults setBool:NO forKey:RemoveBackup]; - [defaults setInteger:60 forKey:AutoSavePeriod]; - [defaults setBool:NO forKey:DeleteCacheWhenQuitting]; - */ + [defaults setObject:@"YES" forKey:SaveOnQuit]; + [defaults setObject:@"YES" forKey:PromptOnClean]; + [defaults setObject:@"YES" forKey:PromptOnQuit]; + [defaults setObject:@"YES" forKey:AutoSave]; + [defaults setObject:@"YES" forKey:KeepBackup]; + [defaults setObject:@"120" forKey:AutoSavePeriod]; + [defaults setObject:@"NO" forKey:DeleteCacheWhenQuitting]; [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; [[NSUserDefaults standardUserDefaults] synchronize]; @@ -223,14 +225,23 @@ - (BOOL)applicationShouldTerminate:(id)sender { -// This should be queried per project! -/* - if ([projectManager hasEditedDocuments]) { - if (NSRunAlertPanel(@"Unsaved projects!", @"Do you want to save them?", @"Yes", @"No", nil)) { - [projectManager saveAllProjects]; + NSString *poq = [[NSUserDefaults standardUserDefaults] objectForKey:PromptOnQuit]; + NSString *soq = [[NSUserDefaults standardUserDefaults] objectForKey:SaveOnQuit]; + + if( [poq isEqualToString:@"YES"] ) + { + if (NSRunAlertPanel(@"Quit!", + @"Do you really want to quit?", + @"No", @"Yes", nil)) { + return NO; } + } -*/ + + if ( [soq isEqualToString:@"YES"] ) { + [projectManager saveAllProjects]; + } + [[NSNotificationCenter defaultCenter] postNotificationName:PCAppWillTerminateNotification object:nil]; return YES; @@ -243,6 +254,7 @@ if ([[[NSUserDefaults standardUserDefaults] stringForKey:DeleteCacheWhenQuitting] isEqualToString:@"YES"]) { [[NSFileManager defaultManager] removeFileAtPath:[projectManager rootBuildPath] handler:nil]; } + [[NSUserDefaults standardUserDefaults] synchronize]; } diff --git a/ProjectCenter/PCMenuController.h b/ProjectCenter/PCMenuController.h index fe2129d..b725638 100644 --- a/ProjectCenter/PCMenuController.h +++ b/ProjectCenter/PCMenuController.h @@ -61,7 +61,6 @@ - (void)newProject:(id)sender; - (void)saveProject:(id)sender; - (void)saveProjectAs:(id)sender; -- (void)showLoadedProjects:(id)sender; - (void)saveFiles:(id)sender; - (void)revertToSaved:(id)sender; diff --git a/ProjectCenter/PCMenuController.m b/ProjectCenter/PCMenuController.m index 7f11b3c..8b13bfe 100644 --- a/ProjectCenter/PCMenuController.m +++ b/ProjectCenter/PCMenuController.m @@ -155,11 +155,6 @@ [projectManager saveProjectAs:proj]; } -- (void)showLoadedProjects:(id)sender -{ - [projectManager showLoadedProjects]; -} - - (void)saveFiles:(id)sender { [projectManager saveFiles]; diff --git a/ProjectCenter/PCPrefController.h b/ProjectCenter/PCPrefController.h index 79ff810..ae079e4 100644 --- a/ProjectCenter/PCPrefController.h +++ b/ProjectCenter/PCPrefController.h @@ -41,7 +41,8 @@ id autoSaveField; id saveAutomatically; - id removeBackup; + id keepBackup; + id saveOnQuit; id useExternalEditor; id promptWhenQuit; @@ -66,8 +67,9 @@ - (void)setPromptOnClean:(id)sender; - (void)setSaveAutomatically:(id)sender; -- (void)setRemoveBackup:(id)sender; +- (void)setKeepBackup:(id)sender; - (void)setSavePeriod:(id)sender; +- (void)setSaveOnQuit:(id)sender; - (void)setUseExternalEditor:(id)sender; diff --git a/ProjectCenter/PCPrefController.m b/ProjectCenter/PCPrefController.m index 715af7f..4027740 100644 --- a/ProjectCenter/PCPrefController.m +++ b/ProjectCenter/PCPrefController.m @@ -269,6 +269,16 @@ [prefSavingView addSubview:v]; RELEASE(v); + saveOnQuit=[[NSButton alloc] initWithFrame:NSMakeRect(24,52,124,15)]; + [saveOnQuit setTitle:@"Save Projects Upon Quit"]; + [saveOnQuit setButtonType:NSSwitchButton]; + [saveOnQuit setBordered:NO]; + [saveOnQuit setTarget:self]; + [saveOnQuit setAction:@selector(setSaveOnQuit:)]; + [saveOnQuit setContinuous:NO]; + [v addSubview:saveOnQuit]; + [saveOnQuit sizeToFit]; + saveAutomatically=[[NSButton alloc] initWithFrame:NSMakeRect(24,32,124,15)]; [saveAutomatically setTitle:@"Save Project Automatically"]; [saveAutomatically setButtonType:NSSwitchButton]; @@ -279,15 +289,15 @@ [v addSubview:saveAutomatically]; [saveAutomatically sizeToFit]; - removeBackup = [[NSButton alloc] initWithFrame:NSMakeRect(24,12,124,15)]; - [removeBackup setTitle:@"Remove Backup Project"]; - [removeBackup setButtonType:NSSwitchButton]; - [removeBackup setBordered:NO]; - [removeBackup setTarget:self]; - [removeBackup setAction:@selector(setRemoveBackup:)]; - [removeBackup setContinuous:NO]; - [v addSubview:removeBackup]; - [removeBackup sizeToFit]; + keepBackup = [[NSButton alloc] initWithFrame:NSMakeRect(24,12,124,15)]; + [keepBackup setTitle:@"Keep Project Backup"]; + [keepBackup setButtonType:NSSwitchButton]; + [keepBackup setBordered:NO]; + [keepBackup setTarget:self]; + [keepBackup setAction:@selector(setKeepBackup:)]; + [keepBackup setContinuous:NO]; + [v addSubview:keepBackup]; + [keepBackup sizeToFit]; v = [[NSBox alloc] init]; [v setTitle:@"Auto-Save"]; @@ -347,8 +357,9 @@ RELEASE(useExternalEditor); RELEASE(promptWhenQuit); RELEASE(promptOnClean); + RELEASE(saveOnQuit); RELEASE(saveAutomatically); - RELEASE(removeBackup); + RELEASE(keepBackup); RELEASE(editorField); RELEASE(debuggerField); @@ -396,6 +407,18 @@ [useExternalEditor setState:([[preferencesDict objectForKey:ExternalEditor] isEqualToString:@"YES"]) ? NSOnState : NSOffState]; + [saveAutomatically setState:([[preferencesDict objectForKey:AutoSave] isEqualToString:@"YES"]) ? NSOnState : NSOffState]; + + [promptOnClean setState:([[preferencesDict objectForKey:PromptOnClean] isEqualToString:@"YES"]) ? NSOnState : NSOffState]; + + [keepBackup setState:([[preferencesDict objectForKey:KeepBackup] isEqualToString:@"YES"]) ? NSOnState : NSOffState]; + + [promptWhenQuit setState:([[preferencesDict objectForKey:PromptOnQuit] isEqualToString:@"YES"]) ? NSOnState : NSOffState]; + + [saveOnQuit setState:([[preferencesDict objectForKey:SaveOnQuit] isEqualToString:@"YES"]) ? NSOnState : NSOffState]; + + [autoSaveField setStringValue:(val=[preferencesDict objectForKey:AutoSavePeriod]) ? val : @"120"]; + if (![prefWindow isVisible]) { [prefWindow setFrameUsingName:@"Preferences"]; } @@ -424,7 +447,8 @@ - (void)setSuccessSound:(id)sender { - NSString *path = [self selectFileWithTypes:[NSArray arrayWithObjects:@"snd",@"au",nil]]; + NSArray *types = [NSArray arrayWithObjects:@"snd",@"au",nil]; + NSString *path = [self selectFileWithTypes:types]; if (path) { [successField setStringValue:path]; @@ -448,18 +472,86 @@ - (void)setPromptOnClean:(id)sender { + NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; + + switch ([[sender selectedCell] state]) { + case 0: + [def setObject:@"NO" forKey:PromptOnClean]; + break; + case 1: + [def setObject:@"YES" forKey:PromptOnClean]; + break; + } + [def synchronize]; + + [preferencesDict setObject:[def objectForKey:PromptOnClean] + forKey:PromptOnClean]; } - (void)setSaveAutomatically:(id)sender { + NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; + + switch ([[sender selectedCell] state]) { + case 0: + [def setObject:@"NO" forKey:AutoSave]; + break; + case 1: + [def setObject:@"YES" forKey:AutoSave]; + break; + } + [def synchronize]; + + [preferencesDict setObject:[def objectForKey:AutoSave] forKey:AutoSave]; } -- (void)setRemoveBackup:(id)sender +- (void)setKeepBackup:(id)sender { + NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; + + switch ([[sender selectedCell] state]) { + case 0: + [def setObject:@"NO" forKey:KeepBackup]; + break; + case 1: + [def setObject:@"YES" forKey:KeepBackup]; + break; + } + [def synchronize]; + + [preferencesDict setObject:[def objectForKey:KeepBackup] + forKey:KeepBackup]; } - (void)setSavePeriod:(id)sender { + NSString *periodString = [autoSaveField stringValue]; + + if (periodString == nil || [periodString isEqualToString:@""]) { + periodString = [NSString stringWithString:@"120"]; + } + + [[NSUserDefaults standardUserDefaults] setObject:periodString + forKey:AutoSavePeriod]; + [preferencesDict setObject:periodString forKey:AutoSavePeriod]; +} + +- (void)setSaveOnQuit:(id)sender +{ + NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; + + switch ([[sender selectedCell] state]) { + case 0: + [def setObject:@"NO" forKey:SaveOnQuit]; + break; + case 1: + [def setObject:@"YES" forKey:SaveOnQuit]; + break; + } + [def synchronize]; + + [preferencesDict setObject:[def objectForKey:SaveOnQuit] + forKey:SaveOnQuit]; } - (void)setUseExternalEditor:(id)sender @@ -475,6 +567,9 @@ break; } [def synchronize]; + + [preferencesDict setObject:[def objectForKey:ExternalEditor] + forKey:ExternalEditor]; } - (void)setEditor:(id)sender @@ -519,6 +614,20 @@ - (void)promptWhenQuitting:(id)sender { + NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; + + switch ([[sender selectedCell] state]) { + case 0: + [def setObject:@"NO" forKey:PromptOnQuit]; + break; + case 1: + [def setObject:@"YES" forKey:PromptOnQuit]; + break; + } + [def synchronize]; + + [preferencesDict setObject:[def objectForKey:PromptOnQuit] + forKey:PromptOnQuit]; } - (NSDictionary *)preferencesDict diff --git a/ProjectCenter/ProjectCenter_main.m b/ProjectCenter/ProjectCenter_main.m index bc7d50b..5af037f 100644 --- a/ProjectCenter/ProjectCenter_main.m +++ b/ProjectCenter/ProjectCenter_main.m @@ -99,7 +99,7 @@ void createMenu() [project addItemWithTitle:@"Open" action:@selector(openProject:) keyEquivalent:@"o"]; [project addItemWithTitle:@"New" action:@selector(newProject:) keyEquivalent:@"n"]; [project addItemWithTitle:@"Save" action:@selector(saveProject:) keyEquivalent:@"s"]; - [project addItemWithTitle:@"Save As" action:@selector(saveProjectAs:) keyEquivalent:@""]; + [project addItemWithTitle:@"Save As" action:@selector(saveProjectAs:) keyEquivalent:@"S"]; [project addItemWithTitle:@"Subprojects" action:action keyEquivalent:@""]; [project addItemWithTitle:@"Close" action:@selector(closeProject:) keyEquivalent:@""]; @@ -163,7 +163,6 @@ void createMenu() tools = [[[NSMenu alloc] init] autorelease]; [menu setSubmenu:tools forItem:[menu itemWithTitle:@"Tools"]]; - [tools addItemWithTitle:@"Loaded Projects..." action:@selector(showLoadedProjects:) keyEquivalent:@""]; [tools addItemWithTitle:@"Build Panel" action:@selector(showBuildPanel:) keyEquivalent:@""]; [tools addItemWithTitle:@"Find Panel" action:@selector(showFindPanel:) keyEquivalent:@"F"]; [tools addItemWithTitle:@"Inspector Panel" action:@selector(showInspector:) keyEquivalent:@""];