Revision: 22224
          http://sourceforge.net/p/bibdesk/svn/22224
Author:   hofman
Date:     2018-05-07 09:44:32 +0000 (Mon, 07 May 2018)
Log Message:
-----------
Use standard completion controller, this handles undo better and I cannot 
figure out how to does

Modified Paths:
--------------
    trunk/bibdesk/BDSKFieldEditor.h
    trunk/bibdesk/BDSKFieldEditor.m

Modified: trunk/bibdesk/BDSKFieldEditor.h
===================================================================
--- trunk/bibdesk/BDSKFieldEditor.h     2018-05-07 06:34:11 UTC (rev 22223)
+++ trunk/bibdesk/BDSKFieldEditor.h     2018-05-07 09:44:32 UTC (rev 22224)
@@ -54,6 +54,7 @@
        NSMutableArray *delegatedDraggedTypes;
     BOOL isEditing;
     BOOL isAutoComplete;
+    BOOL isCompleting;
 }
 - (void)registerForDelegatedDraggedTypes:(NSArray *)pboardTypes;
 - (id <BDSKFieldEditorDelegate>)delegate;

Modified: trunk/bibdesk/BDSKFieldEditor.m
===================================================================
--- trunk/bibdesk/BDSKFieldEditor.m     2018-05-07 06:34:11 UTC (rev 22223)
+++ trunk/bibdesk/BDSKFieldEditor.m     2018-05-07 09:44:32 UTC (rev 22224)
@@ -56,9 +56,11 @@
                [self setFieldEditor:YES];
                delegatedDraggedTypes = nil;
         isEditing = NO;
+        isAutoComplete = NO;
+        isCompleting = NO;
         
                [[NSNotificationCenter defaultCenter] addObserver:self
-                                                                               
                 selector:@selector(handleTextDidBeginEditingNotification:)
+                                                 
selector:@selector(handleTextDidBeginEditingNotification:)
                                                                                
                         name:NSTextDidBeginEditingNotification
                                                                                
                   object:self];
                [[NSNotificationCenter defaultCenter] addObserver:self
@@ -210,28 +212,10 @@
 
 #pragma mark Completion methods
 
-static inline BOOL completionWindowIsVisibleForTextView(NSTextView *textView)
-{
-    BDSKTextViewCompletionController *controller = 
[BDSKTextViewCompletionController sharedController];
-    return ([[controller window] isVisible] && [[controller currentTextView] 
isEqual:textView]);
-}
-
-static inline BOOL forwardSelectorForCompletionInTextView(SEL selector, 
NSTextView *textView)
-{
-    BDSKPRECONDITION([[BDSKTextViewCompletionController sharedController] 
respondsToSelector:selector]);
-    if(completionWindowIsVisibleForTextView(textView)){
-        [[BDSKTextViewCompletionController sharedController] 
performSelector:selector withObject:nil];
-        return YES;
-    }
-    return NO;
-}
-
 // insertText: and deleteBackward: affect the text content, so we send to 
super first, then autocomplete unconditionally since the completion controller 
needs to see the changes
 - (void)insertText:(id)insertString {
     [super insertText:insertString];
     [self doAutoCompleteIfPossible];
-    // passing a nil argument to the completion controller's insertText: is 
safe, and we can ensure the completion window is visible this way
-    forwardSelectorForCompletionInTextView(_cmd, self);
 }
 
 - (void)deleteBackward:(id)sender {
@@ -238,41 +222,8 @@
     [super deleteBackward:(id)sender];
     // deleting a spelling error should also show the completions again
     [self doAutoCompleteIfPossible];
-    forwardSelectorForCompletionInTextView(_cmd, self);
 }
 
-// moveLeft and moveRight should happen regardless of completion, or you can't 
navigate the line with arrow keys
-- (void)moveLeft:(id)sender {
-    forwardSelectorForCompletionInTextView(_cmd, self);
-    [super moveLeft:sender];
-}
-
-- (void)moveRight:(id)sender {
-    forwardSelectorForCompletionInTextView(_cmd, self);
-    [super moveRight:sender];
-}
-
-// the following movement methods are conditional based on whether the 
autocomplete window is visible
-- (void)moveUp:(id)sender {
-    if(forwardSelectorForCompletionInTextView(_cmd, self) == NO)
-        [super moveUp:sender];
-}
-
-- (void)moveDown:(id)sender {
-    if(forwardSelectorForCompletionInTextView(_cmd, self) == NO)
-        [super moveDown:sender];
-}
-
-- (void)insertTab:(id)sender {
-    if(forwardSelectorForCompletionInTextView(_cmd, self) == NO)
-        [super insertTab:sender];
-}
-
-- (void)insertNewline:(id)sender {
-    if(forwardSelectorForCompletionInTextView(_cmd, self) == NO)
-        [super insertNewline:sender];
-}
-
 - (NSRange)rangeForUserCompletion {
     // @@ check this if we have problems inserting accented characters; 
super's implementation can mess that up
     BDSKPRECONDITION([self markedRange].length == 0);    
@@ -304,43 +255,12 @@
     return completions;
 }
 
-- (void)complete:(id)sender;
-{
-    // forward this method so the controller can handle cancellation and undo
-    if(forwardSelectorForCompletionInTextView(_cmd, self))
-        return;
-
-    NSRange selRange = [self rangeForUserCompletion];
-    NSString *string = [self string];
-    if(selRange.location == NSNotFound || [string isEqualToString:@""] || 
selRange.length == 0)
-        return;
-
-    // make sure to initialize this
-    NSInteger idx = 0;
-    NSArray *labels = nil;
-    NSArray *completions = [self completionsForPartialWordRange:selRange 
indexOfSelectedItem:&idx];
-       
-    [[BDSKTextViewCompletionController sharedController] 
displayCompletions:completions indexOfSelectedItem:idx 
forPartialWordRange:selRange originalString:[string 
substringWithRange:selRange] forTextView:self];
+- (void)complete:(id)sender {
+    isCompleting = YES;
+    [super complete:sender];
+    isCompleting = NO;
 }
 
-- (NSRange)selectionRangeForProposedRange:(NSRange)proposedSelRange 
granularity:(NSSelectionGranularity)granularity {
-    if(completionWindowIsVisibleForTextView(self))
-        [[BDSKTextViewCompletionController sharedController] 
endDisplayNoComplete];
-    return [super selectionRangeForProposedRange:proposedSelRange 
granularity:granularity];
-}
-
-- (BOOL)becomeFirstResponder {
-    if(completionWindowIsVisibleForTextView(self))
-        [[BDSKTextViewCompletionController sharedController] 
endDisplayNoComplete];
-    return [super becomeFirstResponder];
-}
-    
-- (BOOL)resignFirstResponder {
-    if(completionWindowIsVisibleForTextView(self))
-        [[BDSKTextViewCompletionController sharedController] 
endDisplayNoComplete];
-    return [super resignFirstResponder];
-}
-
 - (id <BDSKFieldEditorDelegate>)delegate { return (id 
<BDSKFieldEditorDelegate>)[super delegate]; }
 - (void)setDelegate:(id <BDSKFieldEditorDelegate>)newDelegate { [super 
setDelegate:newDelegate]; }
 
@@ -357,7 +277,7 @@
 }
 
 - (void)doAutoCompleteIfPossible {
-       if (completionWindowIsVisibleForTextView(self) == NO && isEditing &&
+       if (isEditing && isCompleting == NO &&
         [[self delegate] 
respondsToSelector:@selector(textViewShouldAutoComplete:)] &&
         [[self delegate] textViewShouldAutoComplete:self]) {
         isAutoComplete = YES;

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Bibdesk-commit mailing list
Bibdesk-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to