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 &#45; New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty&#45;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

Reply via email to