Revision: 15200
http://bibdesk.svn.sourceforge.net/bibdesk/?rev=15200&view=rev
Author: hofman
Date: 2009-04-26 20:04:47 +0000 (Sun, 26 Apr 2009)
Log Message:
-----------
Remove complex string validation during edits from the formatter and move to
the complex string editor. This makes the complex string editor independent of
the formatter, and removes weird caching from the formatter.
Modified Paths:
--------------
trunk/bibdesk/BDSKComplexStringEditor.h
trunk/bibdesk/BDSKComplexStringEditor.m
trunk/bibdesk/BDSKComplexStringFormatter.h
trunk/bibdesk/BDSKComplexStringFormatter.m
trunk/bibdesk/BDSKEditor.m
trunk/bibdesk/BDSKMacroWindowController.m
trunk/bibdesk/BDSKTextImportController.m
Modified: trunk/bibdesk/BDSKComplexStringEditor.h
===================================================================
--- trunk/bibdesk/BDSKComplexStringEditor.h 2009-04-26 19:21:10 UTC (rev
15199)
+++ trunk/bibdesk/BDSKComplexStringEditor.h 2009-04-26 20:04:47 UTC (rev
15200)
@@ -39,21 +39,28 @@
#import <AppKit/AppKit.h>
-...@class BDSKBackgroundView, BDSKComplexStringFormatter;
+...@class BDSKBackgroundView, BDSKMacroResolver;
@interface BDSKComplexStringEditor : NSWindowController {
IBOutlet NSTextField *expandedValueTextField;
IBOutlet BDSKBackgroundView *backgroundView;
+ BDSKMacroResolver *macroResolver;
NSTableView *tableView;
- BDSKComplexStringFormatter *formatter;
NSInteger row;
NSInteger column;
BOOL editable;
}
-- (BOOL)attachToTableView:(NSTableView *)aTableView atRow:(NSInteger)aRow
column:(NSInteger)aColumn withValue:(NSString *)aString
formatter:(BDSKComplexStringFormatter *)aFormatter;
+- (id)initWithMacroResolver:(BDSKMacroResolver *)aMacroResolver;
+
+- (BOOL)attachToTableView:(NSTableView *)aTableView atRow:(NSInteger)aRow
column:(NSInteger)aColumn withValue:(NSString *)aString;
+
- (BOOL)isEditing;
+
- (BOOL)isEditable;
- (void)setEditable:(BOOL)flag;
+- (BDSKMacroResolver *)macroResolver;
+- (void)setMacroResolver:(BDSKMacroResolver *)newMacroResolver;
+
@end
Modified: trunk/bibdesk/BDSKComplexStringEditor.m
===================================================================
--- trunk/bibdesk/BDSKComplexStringEditor.m 2009-04-26 19:21:10 UTC (rev
15199)
+++ trunk/bibdesk/BDSKComplexStringEditor.m 2009-04-26 20:04:47 UTC (rev
15200)
@@ -36,7 +36,7 @@
#import "BDSKComplexStringEditor.h"
#import "BDSKComplexString.h"
-#import "BDSKComplexStringFormatter.h"
+#import "BDSKMacroResolver.h"
#import "BDSKBackgroundView.h"
#import "NSWindowController_BDSKExtensions.h"
@@ -45,7 +45,7 @@
- (void)endEditingAndOrderOut;
- (void)setExpandedValue:(NSString *)expandedValue;
-- (void)setErrorReason:(NSString *)reason errorMessage:(NSString *)message;
+- (void)setError:(NSError *)error;
- (void)cellFrameDidChange:(NSNotification *)notification;
- (void)cellWindowDidBecomeKey:(NSNotification *)notification;
@@ -58,10 +58,10 @@
@implementation BDSKComplexStringEditor
-- (id)init {
+- (id)initWithMacroResolver:(BDSKMacroResolver *)aMacroResolver {
if (self = [super initWithWindowNibName:@"ComplexStringEditor"]) {
tableView = nil;
- formatter = nil;
+ macroResolver = [aMacroResolver retain];
row = -1;
column = -1;
editable = YES;
@@ -69,6 +69,15 @@
return self;
}
+- (id)init {
+ return [self initWithMacroResolver:nil];
+}
+
+- (void)dealloc {
+ [macroResolver release];
+ [super dealloc];
+}
+
- (BOOL)isEditable {
return editable;
}
@@ -77,12 +86,22 @@
editable = flag;
}
-- (BOOL)attachToTableView:(NSTableView *)aTableView atRow:(NSInteger)aRow
column:(NSInteger)aColumn withValue:(NSString *)aString
formatter:(BDSKComplexStringFormatter *)aFormatter {
+- (BDSKMacroResolver *)macroResolver {
+ return macroResolver;
+}
+
+- (void)setMacroResolver:(BDSKMacroResolver *)newMacroResolver {
+ if (macroResolver != newMacroResolver) {
+ [macroResolver release];
+ macroResolver = [newMacroResolver retain];
+ }
+}
+
+- (BOOL)attachToTableView:(NSTableView *)aTableView atRow:(NSInteger)aRow
column:(NSInteger)aColumn withValue:(NSString *)aString {
if ([self isEditing])
return NO; // we are already busy editing
tableView = [aTableView retain];
- formatter = [aFormatter retain];
row = aRow;
column = aColumn;
@@ -172,8 +191,6 @@
// release the temporary objects
[tableView release];
tableView = nil; // we should set this to nil, as we use this as a flag
that we are editing
- [formatter release];
- formatter = nil;
row = -1;
column = -1;
}
@@ -187,7 +204,9 @@
[expandedValueTextField setToolTip:NSLocalizedString(@"This field
contains macros and is being edited as it would appear in a BibTeX file. This
is the expanded value.", @"Tool tip message")];
}
-- (void)setErrorReason:(NSString *)reason errorMessage:(NSString *)message {
+- (void)setError:(NSError *)error {
+ NSString *reason = [error localizedDescription];
+ NSString *message = [NSString stringWithFormat:NSLocalizedString(@"Invalid
BibTeX string: %...@. This change will not be recorded.", @"Tool tip message"),
reason];
[expandedValueTextField setTextColor:[NSColor redColor]];
[expandedValueTextField setStringValue:reason];
[expandedValueTextField setToolTip:message];
@@ -251,12 +270,14 @@
[self endEditingAndOrderOut];
}
-- (void)controlTextDidChange:(NSNotification*)notification {
- NSString *error = [formatter parseError];
- if (error)
- [self setErrorReason:error errorMessage:[NSString
stringWithFormat:NSLocalizedString(@"Invalid BibTeX string: %...@. This change
will not be recorded.", @"Tool tip message"),error]];
+- (void)controlTextDidChange:(NSNotification *)notification {
+ NSString *string = [[[notification userInfo]
objectForKey:@"NSFieldEditor"] string];
+ NSError *error = nil;
+ NSString *complexString = [NSString stringWithBibTeXString:string
macroResolver:macroResolver error:&error];
+ if (complexString)
+ [self setExpandedValue:complexString];
else
- [self setExpandedValue:[formatter parsedString]];
+ [self setError:error];
}
#pragma mark NSTableView notification handlers
Modified: trunk/bibdesk/BDSKComplexStringFormatter.h
===================================================================
--- trunk/bibdesk/BDSKComplexStringFormatter.h 2009-04-26 19:21:10 UTC (rev
15199)
+++ trunk/bibdesk/BDSKComplexStringFormatter.h 2009-04-26 20:04:47 UTC (rev
15200)
@@ -39,8 +39,6 @@
@class BDSKMacroResolver;
@interface BDSKComplexStringFormatter : NSFormatter {
- NSString *parsedString;
- NSString *parseError;
id macroResolver;
BOOL editAsComplexString;
id delegate;
@@ -49,12 +47,6 @@
- (id)initWithDelegate:(id)anObject macroResolver:(BDSKMacroResolver
*)aMacroResolver;
-- (NSString *)parsedString;
-- (void)setParsedString:(NSString *)newString;
-
-- (NSString *)parseError;
-- (void)setParseError:(NSString *)newError;
-
- (id)macroResolver;
- (void)setMacroResolver:(BDSKMacroResolver *)newMacroResolver;
Modified: trunk/bibdesk/BDSKComplexStringFormatter.m
===================================================================
--- trunk/bibdesk/BDSKComplexStringFormatter.m 2009-04-26 19:21:10 UTC (rev
15199)
+++ trunk/bibdesk/BDSKComplexStringFormatter.m 2009-04-26 20:04:47 UTC (rev
15200)
@@ -48,8 +48,6 @@
- (id)initWithDelegate:(id)anObject macroResolver:(BDSKMacroResolver
*)aMacroResolver {
if (self = [super init]) {
- parsedString = nil;
- parseError = nil;
highlighted = NO;
editAsComplexString = NO;
[self setMacroResolver:aMacroResolver];
@@ -60,8 +58,6 @@
- (void)dealloc {
[macroResolver release];
- [parsedString release];
- [parseError release];
[super dealloc];
}
@@ -73,18 +69,11 @@
- (NSString *)editingStringForObjectValue:(id)obj {
NSString *string = [self stringForObjectValue:obj];
- [parsedString release];
- parsedString = [obj retain];
- [parseError release];
- parseError = nil;
- if ([obj isComplex] == YES && editAsComplexString == NO) {
+ if ([obj isComplex] && editAsComplexString == NO) {
if ([delegate
respondsToSelector:@selector(formatter:shouldEditAsComplexString:)])
editAsComplexString = [delegate formatter:self
shouldEditAsComplexString:obj];
}
- if (editAsComplexString)
- return [string stringAsBibTeXString];
- else
- return string;
+ return editAsComplexString ? [string stringAsBibTeXString] : string;
}
- (NSAttributedString *)attributedStringForObjectValue:(id)obj
withDefaultAttributes:(NSDictionary *)defaultAttrs{
@@ -126,9 +115,6 @@
- (BOOL)getObjectValue:(id *)obj forString:(NSString *)string
errorDescription:(NSString **)error{
- [self setParseError:nil];
- [self setParsedString:nil];
-
// convert newlines to a single space, then collapse (mainly for
paste/drag text, RFE #1457532)
if([string rangeOfCharacterFromSet:[NSCharacterSet
newlineCharacterSet]].length){
string = [string stringByReplacingCharactersInSet:[NSCharacterSet
newlineCharacterSet] withString:@" "];
@@ -138,65 +124,26 @@
string = [string stringByReplacingCharactersInSet:[NSCharacterSet
controlCharacterSet] withString:@""];
string = [string stringByReplacingCharactersInSet:[NSCharacterSet
illegalCharacterSet] withString:@""];
- NSError *complexError = nil;
-
if (editAsComplexString) {
- NSString *complexString = [NSString stringWithBibTeXString:string
macroResolver:macroResolver error:&complexError];
- if (complexString)
- [self setParsedString:complexString];
+ NSError *complexError = nil;
+ string = [NSString stringWithBibTeXString:string
macroResolver:macroResolver error:&complexError];
+ if (string == nil && error)
+ *error = [complexError localizedDescription];
} else if ([string isStringTeXQuotingBalancedWithBraces:YES connected:NO]
== NO) {
- // not really a complex string exception, but we'll handle it the same
way
- complexError = [NSError
mutableLocalErrorWithCode:kBDSKComplexStringError
localizedDescription:NSLocalizedString(@"Unbalanced braces", @"error
description")];
- } else {
- [self setParsedString:string];
+ string = nil;
+ if (error)
+ *error = NSLocalizedString(@"Unbalanced braces", @"error
description");
}
-
- if (complexError)
- [self setParseError:[complexError localizedDescription]];
- if(error)
- *error = [self parseError];
- if(obj)
- *obj = [self parsedString];
-
- return (parseError ? NO : YES);
+ if (string == nil)
+ return NO;
+ else if (obj)
+ *obj = string;
+ return YES;
}
-- (BOOL)isPartialStringValid:(NSString **)partialStringPtr
- proposedSelectedRange:(NSRangePointer)proposedSelRangePtr
- originalString:(NSString *)origString
- originalSelectedRange:(NSRange)origSelRange
- errorDescription:(NSString **)error{
- // this sets the parsed string or the parse error
- [self getObjectValue:NULL forString:*partialStringPtr
errorDescription:NULL];
- // return YES even if not valid or we won't be able to edit
- return YES;
-}
-
#pragma mark Accessors
-- (NSString *)parseError {
- return [[parseError retain] autorelease];
-}
-
-- (void)setParseError:(NSString *)newError{
- if(parseError != newError){
- [parseError release];
- parseError = [newError copy];
- }
-}
-
-- (NSString *)parsedString {
- return [[parsedString retain] autorelease];
-}
-
-- (void)setParsedString:(NSString *)newString{
- if(parsedString != newString){
- [parsedString release];
- parsedString = [newString copy];
- }
-}
-
- (id)macroResolver {
return macroResolver;
}
Modified: trunk/bibdesk/BDSKEditor.m
===================================================================
--- trunk/bibdesk/BDSKEditor.m 2009-04-26 19:21:10 UTC (rev 15199)
+++ trunk/bibdesk/BDSKEditor.m 2009-04-26 20:04:47 UTC (rev 15200)
@@ -1825,7 +1825,7 @@
if ([complexStringEditor isEditing] || row == -1)
return NO;
if (complexStringEditor == nil) {
- complexStringEditor = [[BDSKComplexStringEditor alloc] init];
+ complexStringEditor = [[BDSKComplexStringEditor alloc]
initWithMacroResolver:[[publication owner] macroResolver]];
[complexStringEditor setEditable:isEditable];
}
NSString *value = [publication valueOfField:[fields objectAtIndex:row]];
@@ -1836,7 +1836,7 @@
[[[tableView tableColumnWithIdentifier:@"value"]
dataCellForRow:row] setObjectValue:value];
[fieldEditor selectAll:self];
}
- return [complexStringEditor attachToTableView:tableView atRow:row
column:1 withValue:value formatter:tableCellFormatter];
+ return [complexStringEditor attachToTableView:tableView atRow:row
column:1 withValue:value];
}
- (BOOL)formatter:(BDSKComplexStringFormatter *)formatter
shouldEditAsComplexString:(NSString *)object {
Modified: trunk/bibdesk/BDSKMacroWindowController.m
===================================================================
--- trunk/bibdesk/BDSKMacroWindowController.m 2009-04-26 19:21:10 UTC (rev
15199)
+++ trunk/bibdesk/BDSKMacroWindowController.m 2009-04-26 20:04:47 UTC (rev
15200)
@@ -348,7 +348,7 @@
if ([complexStringEditor isEditing] || row == -1)
return NO;
if(complexStringEditor == nil) {
- complexStringEditor = [[BDSKComplexStringEditor alloc] init];
+ complexStringEditor = [[BDSKComplexStringEditor alloc]
initWithMacroResolver:macroResolver];
[complexStringEditor setEditable:isEditable];
}
BDSKMacro *macro = [[arrayController arrangedObjects] objectAtIndex:row];
@@ -360,7 +360,7 @@
[[[tableView tableColumnWithIdentifier:@"value"]
dataCellForRow:row] setObjectValue:value];
[fieldEditor selectAll:self];
}
- return [complexStringEditor attachToTableView:tableView atRow:row
column:1 withValue:value formatter:tableCellFormatter];
+ return [complexStringEditor attachToTableView:tableView atRow:row
column:1 withValue:value];
}
#pragma mark BDSKMacroFormatter delegate
Modified: trunk/bibdesk/BDSKTextImportController.m
===================================================================
--- trunk/bibdesk/BDSKTextImportController.m 2009-04-26 19:21:10 UTC (rev
15199)
+++ trunk/bibdesk/BDSKTextImportController.m 2009-04-26 20:04:47 UTC (rev
15200)
@@ -1366,8 +1366,8 @@
if ([complexStringEditor isEditing] || row == -1 || [[fields
objectAtIndex:row] isEqualToString:BDSKCrossrefString] || [[fields
objectAtIndex:row] isCitationField])
return NO;
if (complexStringEditor == nil)
- complexStringEditor = [[BDSKComplexStringEditor alloc] init];
- NSString *value = [item valueOfField:[fields objectAtIndex:row]];
+ complexStringEditor = [[BDSKComplexStringEditor alloc]
initWithMacroResolver:[self macroResolver]];
+ NSString *value = [item valueOfField:[fields objectAtIndex:row]];
NSText *fieldEditor = [itemTableView currentEditor];
[tableCellFormatter setEditAsComplexString:YES];
if (fieldEditor) {
@@ -1375,7 +1375,7 @@
[[[itemTableView tableColumnWithIdentifier:@"value"]
dataCellForRow:row] setObjectValue:value];
[fieldEditor selectAll:self];
}
- return [complexStringEditor attachToTableView:itemTableView atRow:row
column:2 withValue:value formatter:tableCellFormatter];
+ return [complexStringEditor attachToTableView:itemTableView atRow:row
column:2 withValue:value];
}
#pragma mark BDSKMacroFormatter delegate
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty-free distribution of the report engine for externally facing
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit