Revision: 27474
          http://sourceforge.net/p/bibdesk/svn/27474
Author:   hofman
Date:     2022-05-24 15:05:18 +0000 (Tue, 24 May 2022)
Log Message:
-----------
use new class for textview editing in editor that forwards undo to the 
document's undomanager when no actions are on the stack

Modified Paths:
--------------
    trunk/bibdesk/BDSKEditor.m
    trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj

Added Paths:
-----------
    trunk/bibdesk/BDSKTextUndoManager.h
    trunk/bibdesk/BDSKTextUndoManager.m

Modified: trunk/bibdesk/BDSKEditor.m
===================================================================
--- trunk/bibdesk/BDSKEditor.m  2022-05-24 14:34:04 UTC (rev 27473)
+++ trunk/bibdesk/BDSKEditor.m  2022-05-24 15:05:18 UTC (rev 27474)
@@ -92,6 +92,7 @@
 #import "NSBezierPath_BDSKExtensions.h"
 #import "NSLayoutConstraint_BDSKExtensions.h"
 #import "NSFont_BDSKExtensions.h"
+#import "BDSKTextUndoManager.h"
 
 #define WEAK_NULL NULL
 
@@ -3037,15 +3038,15 @@
 - (NSUndoManager *)undoManagerForTextView:(NSTextView *)aTextView {
        if(aTextView == notesView){
         if(notesViewUndoManager == nil)
-            notesViewUndoManager = [[NSUndoManager alloc] init];
+            notesViewUndoManager = [[BDSKTextUndoManager alloc] 
initWithNextUndoManager:[self undoManager]];
         return notesViewUndoManager;
     }else if(aTextView == abstractView){
         if(abstractViewUndoManager == nil)
-            abstractViewUndoManager = [[NSUndoManager alloc] init];
+            abstractViewUndoManager = [[BDSKTextUndoManager alloc] 
initWithNextUndoManager:[self undoManager]];
         return abstractViewUndoManager;
     }else if(aTextView == rssDescriptionView){
         if(rssDescriptionViewUndoManager == nil)
-            rssDescriptionViewUndoManager = [[NSUndoManager alloc] init];
+            rssDescriptionViewUndoManager = [[BDSKTextUndoManager alloc] 
initWithNextUndoManager:[self undoManager]];
         return rssDescriptionViewUndoManager;
        }else return [self undoManager];
 }

Added: trunk/bibdesk/BDSKTextUndoManager.h
===================================================================
--- trunk/bibdesk/BDSKTextUndoManager.h                         (rev 0)
+++ trunk/bibdesk/BDSKTextUndoManager.h 2022-05-24 15:05:18 UTC (rev 27474)
@@ -0,0 +1,46 @@
+//
+//  BDSKTextUndoManager.h
+//  BibDesk
+//
+//  Created by Christiaan Hofman on 24/05/2022.
+/*
+ This software is Copyright (c) 2022
+ Christiaan Hofman. All rights reserved.
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 
+ - Neither the name of Christiaan Hofman nor the names of any
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+ 
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface BDSKTextUndoManager : NSUndoManager {
+    NSUndoManager *nextUndoManager;
+}
+- (id)initWithNextUndoManager:(NSUndoManager *)undoManager;
+@end

Added: trunk/bibdesk/BDSKTextUndoManager.m
===================================================================
--- trunk/bibdesk/BDSKTextUndoManager.m                         (rev 0)
+++ trunk/bibdesk/BDSKTextUndoManager.m 2022-05-24 15:05:18 UTC (rev 27474)
@@ -0,0 +1,86 @@
+//
+//  BDSKTextUndoManager.m
+//  BibDesk
+//
+//  Created by Christiaan Hofman on 24/05/2022.
+/*
+ This software is Copyright (c) 2022
+ Christiaan Hofman. All rights reserved.
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 
+ - Neither the name of Christiaan Hofman nor the names of any
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+ 
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "BDSKTextUndoManager.h"
+
+@implementation BDSKTextUndoManager
+
+- (id)initWithNextUndoManager:(NSUndoManager *)undoManager {
+    self = [super init];
+    if (self) {
+        nextUndoManager = [undoManager retain];
+    }
+    return self;
+}
+
+- (void)dealloc {
+    BDSKDESTROY(nextUndoManager);
+    [super dealloc];
+}
+
+- (NSString *)redoMenuItemTitle {
+    return [super canRedo] || nextUndoManager == nil ? [super 
redoMenuItemTitle] : [nextUndoManager redoMenuItemTitle];
+}
+
+- (NSString *)undoMenuItemTitle {
+    return [super canUndo] || nextUndoManager == nil ? [super 
undoMenuItemTitle] : [nextUndoManager undoMenuItemTitle];
+}
+
+- (BOOL)canRedo {
+    return [super canRedo] || [nextUndoManager canRedo];
+}
+
+- (BOOL)canUndo {
+    return [super canUndo] || [nextUndoManager canUndo];
+}
+
+- (void)redo {
+    if ([super canRedo])
+        [super redo];
+    else
+        [nextUndoManager redo];
+}
+
+- (void)undo {
+    if ([super canUndo])
+        [super undo];
+    else
+        [nextUndoManager undo];
+}
+
+@end

Modified: trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj
===================================================================
--- trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj     2022-05-24 14:34:04 UTC 
(rev 27473)
+++ trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj     2022-05-24 15:05:18 UTC 
(rev 27474)
@@ -567,6 +567,8 @@
                CE94C0DA10A8F2A2002634D2 /* SkimNotesBase.framework in 
Frameworks */ = {isa = PBXBuildFile; fileRef = CE52E69D0E2D2B87007B6C62 /* 
SkimNotesBase.framework */; };
                CE95A57C0A88883300334DFA /* BDSKReadMeController.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = CE95A57A0A88883300334DFA /* 
BDSKReadMeController.m */; };
                CE95AF180ADBE7C000CB20E7 /* BDSKTemplateObjectProxy.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CE95AF160ADBE7C000CB20E7 /* 
BDSKTemplateObjectProxy.m */; };
+               CE963637283D292F00D8A983 /* BDSKTextUndoManager.h in Headers */ 
= {isa = PBXBuildFile; fileRef = CE963635283D292F00D8A983 /* 
BDSKTextUndoManager.h */; };
+               CE963638283D292F00D8A983 /* BDSKTextUndoManager.m in Sources */ 
= {isa = PBXBuildFile; fileRef = CE963636283D292F00D8A983 /* 
BDSKTextUndoManager.m */; };
                CE9666460B46B70C003BAB9A /* BDSKServerInfo.m in Sources */ = 
{isa = PBXBuildFile; fileRef = CE9666440B46B70C003BAB9A /* BDSKServerInfo.m */; 
};
                CE966C710B47CF25003BAB9A /* BDSKDublinCoreXMLParser.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CE966C6F0B47CF25003BAB9A /* 
BDSKDublinCoreXMLParser.m */; };
                CE969E340931E4F500EE3DFD /* NSTableHeaderView_BDSKExtensions.m 
in Sources */ = {isa = PBXBuildFile; fileRef = CE969E320931E4F500EE3DFD /* 
NSTableHeaderView_BDSKExtensions.m */; };
@@ -1698,6 +1700,8 @@
                CE95A57A0A88883300334DFA /* BDSKReadMeController.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= BDSKReadMeController.m; sourceTree = "<group>"; };
                CE95AF150ADBE7C000CB20E7 /* BDSKTemplateObjectProxy.h */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path 
= BDSKTemplateObjectProxy.h; sourceTree = "<group>"; };
                CE95AF160ADBE7C000CB20E7 /* BDSKTemplateObjectProxy.m */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; 
path = BDSKTemplateObjectProxy.m; sourceTree = "<group>"; };
+               CE963635283D292F00D8A983 /* BDSKTextUndoManager.h */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
BDSKTextUndoManager.h; sourceTree = "<group>"; };
+               CE963636283D292F00D8A983 /* BDSKTextUndoManager.m */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = 
BDSKTextUndoManager.m; sourceTree = "<group>"; };
                CE9666430B46B70C003BAB9A /* BDSKServerInfo.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
BDSKServerInfo.h; sourceTree = "<group>"; };
                CE9666440B46B70C003BAB9A /* BDSKServerInfo.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= BDSKServerInfo.m; sourceTree = "<group>"; };
                CE966C6E0B47CF25003BAB9A /* BDSKDublinCoreXMLParser.h */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path 
= BDSKDublinCoreXMLParser.h; sourceTree = "<group>"; };
@@ -2850,6 +2854,7 @@
                                CE82B2D00D57AE0B00A2E8C5 /* BDSKSharingClient.m 
*/,
                                F92ED7CB09E0A93400A244D0 /* BDSKSharingServer.m 
*/,
                                F9F78CD307D5320D004B68AF /* 
BDSKStringEncodingManager.m */,
+                               CE963636283D292F00D8A983 /* 
BDSKTextUndoManager.m */,
                                F9022C980758038000C3F701 /* BDSKTypeManager.m 
*/,
                                F9022CA30758038000C3F701 /* 
BDSKTypeSelectHelper.m */,
                                3DAEA2EC07703F6000AF111A /* BDSKUndoManager.m 
*/,
@@ -3281,8 +3286,8 @@
                                F9706DE309102DF500526FC8 /* BDSKGradientView.h 
*/,
                                CE21D10809208B9D0075E607 /* BDSKGroup.h */,
                                CE82B4710D57EECF00A2E8C5 /* 
BDSKGroup+Scripting.h */,
+                               CE675A0B26A359EC003B1FFA /* 
BDSKGroupBubbleView.h */,
                                CE6759F226A356F0003B1FFA /* BDSKGroupCellView.h 
*/,
-                               CE675A0B26A359EC003B1FFA /* 
BDSKGroupBubbleView.h */,
                                CE6E5CE826AC15B10010D7BB /* 
BDSKGroupImageView.h */,
                                F97BE8EF0907321F0063504B /* 
BDSKGroupOutlineView.h */,
                                CE2AF1A926BAD4E100B4279A /* 
BDSKGroupParentCell.h */,
@@ -3416,6 +3421,7 @@
                                F9DB895A08A54BBA00CB3D53 /* BDSKTeXTask.h */,
                                27AFAF9A080D1E1B0096F5D2 /* 
BDSKTextImportController.h */,
                                CE33D604136AB73600ACE924 /* 
BDSKTextImportItemTableView.h */,
+                               CE963635283D292F00D8A983 /* 
BDSKTextUndoManager.h */,
                                F98AA67F0971E3F400184BD8 /* 
BDSKTextViewCompletionController.h */,
                                F9DCEA4D094B7D1100AEE662 /* 
BDSKTextWithIconCell.h */,
                                CE8961850CBEB59800EA2D98 /* BDSKToken.h */,
@@ -3636,6 +3642,7 @@
                                CE2A0A45224599F600A8F31C /* 
BDSKPreferenceRecord.h in Headers */,
                                CE2A0A5D22459A0A00A8F31C /* BDSKScriptHook.h in 
Headers */,
                                CE2A0AC222459A4B00A8F31C /* html2tex.h in 
Headers */,
+                               CE963637283D292F00D8A983 /* 
BDSKTextUndoManager.h in Headers */,
                                CE2A09D8224599B300A8F31C /* 
BDSKCondition+Scripting.h in Headers */,
                                CE2A0A1D224599EF00A8F31C /* 
BDSKISIGroupServer.h in Headers */,
                                CE5417CA22D4DA7700867189 /* 
BDSKAuthenticationHandler.h in Headers */,
@@ -4626,6 +4633,7 @@
                                3D44F5630812A91D003C67F0 /* BDSKFormatParser.m 
in Sources */,
                                CE0D24C9215A84F3001A3F47 /* 
NSScriptCommand_BDSKExtensions.m in Sources */,
                                3D0D76B3084898C100A495A5 /* BibPref_Crossref.m 
in Sources */,
+                               CE963638283D292F00D8A983 /* 
BDSKTextUndoManager.m in Sources */,
                                3D7406940849F5430081EC6F /* 
BDSKTypeNameFormatter.m in Sources */,
                                F97965F2086909EA00050427 /* 
BDSKFindController.m in Sources */,
                                CEA22F3F26B86A3900DFE422 /* 
NSLayoutConstraint_BDSKExtensions.m in Sources */,

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



_______________________________________________
Bibdesk-commit mailing list
Bibdesk-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to