diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/Preambles.h | 3 | ||||
-rw-r--r-- | src/common/Preambles.m | 33 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/common/Preambles.h b/src/common/Preambles.h index 6cef9c1..d507ad9 100644 --- a/src/common/Preambles.h +++ b/src/common/Preambles.h @@ -44,6 +44,9 @@ - (NSString*)preambleForName:(NSString*)name; - (BOOL)setPreamble:(NSString*)content forName:(NSString*)name; +- (NSString*)addPreamble; +- (NSString*)addPreambleWithNameBase:(NSString*)name; + - (BOOL)renamePreambleFrom:(NSString*)old to:(NSString*)new; - (BOOL)removePreamble:(NSString*)name; diff --git a/src/common/Preambles.m b/src/common/Preambles.m index 68f41a3..4f74dd0 100644 --- a/src/common/Preambles.m +++ b/src/common/Preambles.m @@ -173,6 +173,26 @@ static NSString *POSTAMBLE = return @"default"; } +- (NSString*)addPreamble { + return [self addPreambleWithNameBase:@"new preamble"]; +} + +- (NSString*)addPreambleWithNameBase:(NSString*)base { + if ([preambleDict objectForKey:base] == nil) { + [self setPreamble:[self defaultPreamble] forName:base]; + return base; + } + int i = 0; + NSString *tryName = nil; + do { + ++i; + tryName = [NSString stringWithFormat:@"%@ %d", base, i]; + } while ([preambleDict objectForKey:tryName] != nil); + + [self setPreamble:[self defaultPreamble] forName:tryName]; + return tryName; +} + - (BOOL)renamePreambleFrom:(NSString*)old to:(NSString*)new { if ([old isEqualToString:@"default"]) return NO; @@ -180,18 +200,31 @@ static NSString *POSTAMBLE = return NO; if ([old isEqualToString:new]) return YES; + BOOL isSelected = NO; + if ([old isEqualToString:selectedPreambleName]) { + [self setSelectedPreambleName:nil]; + isSelected = YES; + } NSString *preamble = [preambleDict objectForKey:old]; [preamble retain]; [preambleDict removeObjectForKey:old]; [preambleDict setObject:preamble forKey:new]; [preamble release]; + if (isSelected) { + [self setSelectedPreambleName:new]; + } return YES; } - (BOOL)removePreamble:(NSString*)name { if ([name isEqualToString:@"default"]) return NO; + // "name" may be held only by being the selected preamble... + [name retain]; + if ([name isEqualToString:selectedPreambleName]) + [self setSelectedPreambleName:nil]; [preambleDict removeObjectForKey:name]; + [name release]; return YES; } |