Revision: 14523
          http://sourceforge.net/p/skim-app/code/14523
Author:   hofman
Date:     2024-10-07 14:48:20 +0000 (Mon, 07 Oct 2024)
Log Message:
-----------
Make transition info immutable, and labeled subclass mutable. Use 
SKLabeledTransitionInfo in presentation options sheet. Copy transition info in 
controller.

Modified Paths:
--------------
    trunk/SKMainDocument.m
    trunk/SKPresentationOptionsSheetController.h
    trunk/SKPresentationOptionsSheetController.m
    trunk/SKTransitionController.h
    trunk/SKTransitionController.m
    trunk/SKTransitionInfo.h
    trunk/SKTransitionInfo.m

Modified: trunk/SKMainDocument.m
===================================================================
--- trunk/SKMainDocument.m      2024-10-07 09:40:30 UTC (rev 14522)
+++ trunk/SKMainDocument.m      2024-10-07 14:48:20 UTC (rev 14523)
@@ -1588,8 +1588,7 @@
 
 - (void)setPresentationOptions:(NSDictionary *)dictionary {
     SKTransitionController *transitions = [[self mainWindowController] 
transitionControllerCreating:YES];
-    SKTransitionInfo *transition = [[SKTransitionInfo alloc] init];
-    [transition setProperties:dictionary];
+    SKTransitionInfo *transition = [[SKTransitionInfo alloc] 
initWithProperties:dictionary];
     [transitions setTransition:transition];
     [transitions setPageTransitions:[dictionary 
objectForKey:PAGETRANSITIONS_KEY]];
 }

Modified: trunk/SKPresentationOptionsSheetController.h
===================================================================
--- trunk/SKPresentationOptionsSheetController.h        2024-10-07 09:40:30 UTC 
(rev 14522)
+++ trunk/SKPresentationOptionsSheetController.h        2024-10-07 14:48:20 UTC 
(rev 14523)
@@ -42,7 +42,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class SKMainWindowController, SKThumbnail, SKTransitionInfo, SKPDFPageView;
+@class SKMainWindowController, SKThumbnail, SKLabeledTransitionInfo, 
SKPDFPageView;
 
 @interface SKPresentationOptionsSheetController : NSWindowController 
<NSWindowDelegate, SKTableViewDelegate, NSTableViewDataSource, 
NSTouchBarDelegate> {
     NSPopUpButton *notesDocumentPopUpButton;
@@ -55,11 +55,11 @@
     NSLayoutConstraint *tableWidthConstraint;
     NSArrayController *arrayController;
     BOOL separate;
-    SKTransitionInfo *transition;
-    NSArray<SKTransitionInfo *> *transitions;
+    SKLabeledTransitionInfo *transition;
+    NSArray<SKLabeledTransitionInfo *> *transitions;
     __weak SKMainWindowController *controller;
     NSUndoManager *undoManager;
-    NSMutableSet<SKTransitionInfo *> *changedTransitions;
+    NSMutableSet<SKLabeledTransitionInfo *> *changedTransitions;
     NSPanel *previewWindow;
     SKPDFPageView *previewView;
 }
@@ -71,9 +71,9 @@
 @property (nonatomic, nullable, strong) IBOutlet NSLayoutConstraint 
*boxLeadingConstraint, *tableWidthConstraint;
 @property (nonatomic, nullable, strong) IBOutlet NSArrayController 
*arrayController;
 @property (nonatomic) BOOL separate;
-@property (nonatomic, readonly) SKTransitionInfo *transition;
-@property (nonatomic, nullable, copy) NSArray<SKTransitionInfo *> *transitions;
-@property (nonatomic, nullable, readonly) NSArray<SKTransitionInfo *> 
*currentTransitions;
+@property (nonatomic, readonly) SKLabeledTransitionInfo *transition;
+@property (nonatomic, nullable, copy) NSArray<SKLabeledTransitionInfo *> 
*transitions;
+@property (nonatomic, nullable, readonly) NSArray<SKLabeledTransitionInfo *> 
*currentTransitions;
 @property (nonatomic, nullable, readonly) NSArray<NSDictionary<NSString *, id> 
*> *pageTransitions;
 @property (nonatomic, nullable, readonly) NSDocument *notesDocument;
 @property (nonatomic, readonly) NSInteger notesDocumentOffset;
@@ -81,8 +81,8 @@
 
 - (instancetype)initForController:(SKMainWindowController *)aController;
 
-- (void)startObservingTransitions:(NSArray<SKTransitionInfo *> *)infos;
-- (void)stopObservingTransitions:(NSArray<SKTransitionInfo *> *)infos;
+- (void)startObservingTransitions:(NSArray<SKLabeledTransitionInfo *> *)infos;
+- (void)stopObservingTransitions:(NSArray<SKLabeledTransitionInfo *> *)infos;
 
 - (IBAction)preview:(nullable id)sender;
 

Modified: trunk/SKPresentationOptionsSheetController.m
===================================================================
--- trunk/SKPresentationOptionsSheetController.m        2024-10-07 09:40:30 UTC 
(rev 14522)
+++ trunk/SKPresentationOptionsSheetController.m        2024-10-07 14:48:20 UTC 
(rev 14523)
@@ -98,7 +98,7 @@
     if (self) {
         controller = aController;
         separate = NO;
-        transition = [[SKTransitionInfo alloc] init];
+        transition = [[SKLabeledTransitionInfo alloc] init];
         transitions = nil;
     }
     return self;
@@ -214,8 +214,7 @@
     
     for (SKThumbnail *next in [controller thumbnails]) {
         if (tn) {
-            SKLabeledTransitionInfo *info = [[SKLabeledTransitionInfo alloc] 
init];
-            [info setProperties:([ptEnum nextObject] ?: dictionary)];
+            SKLabeledTransitionInfo *info = [[SKLabeledTransitionInfo alloc] 
initWithProperties:([ptEnum nextObject] ?: dictionary)];
             [info setThumbnail:tn];
             [info setToThumbnail:next];
             [array addObject:info];
@@ -494,7 +493,7 @@
 }
 
 - (void)startObservingTransitions:(NSArray *)infos {
-    for (SKTransitionInfo *info in infos) {
+    for (SKLabeledTransitionInfo *info in infos) {
         [info addObserver:self forKeyPath:STYLE_KEY 
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) 
context:&SKTransitionPropertiesObservationContext];
         [info addObserver:self forKeyPath:DURATION_KEY 
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) 
context:&SKTransitionPropertiesObservationContext];
         [info addObserver:self forKeyPath:SHOULDRESTRICT_KEY 
options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) 
context:&SKTransitionPropertiesObservationContext];
@@ -502,7 +501,7 @@
 }
 
 - (void)stopObservingTransitions:(NSArray *)infos {
-    for (SKTransitionInfo *info in infos) {
+    for (SKLabeledTransitionInfo *info in infos) {
         [info removeObserver:self forKeyPath:STYLE_KEY 
context:&SKTransitionPropertiesObservationContext];
         [info removeObserver:self forKeyPath:DURATION_KEY 
context:&SKTransitionPropertiesObservationContext];
         [info removeObserver:self forKeyPath:SHOULDRESTRICT_KEY 
context:&SKTransitionPropertiesObservationContext];
@@ -509,7 +508,7 @@
     }
 }
 
-- (void)setValue:(id)value forKey:(NSString *)key 
ofTransition:(SKTransitionInfo *)info {
+- (void)setValue:(id)value forKey:(NSString *)key 
ofTransition:(SKLabeledTransitionInfo *)info {
     [info setValue:value forKey:key];
 }
 
@@ -600,7 +599,7 @@
             if (row == -1)
                 [transitions setValue:info forKey:INFO_KEY];
             else
-                [(SKTransitionInfo *)[transitions objectAtIndex:row] 
setInfo:info];
+                [[transitions objectAtIndex:row] setInfo:info];
             return YES;
         }
     }

Modified: trunk/SKTransitionController.h
===================================================================
--- trunk/SKTransitionController.h      2024-10-07 09:40:30 UTC (rev 14522)
+++ trunk/SKTransitionController.h      2024-10-07 14:48:20 UTC (rev 14523)
@@ -51,7 +51,7 @@
     NSArray<NSDictionary<NSString *, id> *> *pageTransitions;
 }
 
-@property (nonatomic, nullable, strong) SKTransitionInfo *transition;
+@property (nonatomic, nullable, copy) SKTransitionInfo *transition;
 @property (nonatomic, nullable, copy) NSArray<NSDictionary<NSString *, id> *> 
*pageTransitions;
 
 @property (nonatomic) BOOL shouldScale;

Modified: trunk/SKTransitionController.m
===================================================================
--- trunk/SKTransitionController.m      2024-10-07 09:40:30 UTC (rev 14522)
+++ trunk/SKTransitionController.m      2024-10-07 14:48:20 UTC (rev 14523)
@@ -178,10 +178,8 @@
     }
     
     SKTransitionInfo *currentTransition = transition;
-    if (idx < [pageTransitions count]) {
-        currentTransition = [[SKTransitionInfo alloc] init];
-        [currentTransition setProperties:[pageTransitions objectAtIndex:idx]];
-    }
+    if (idx < [pageTransitions count])
+        currentTransition = [[SKTransitionInfo alloc] 
initWithProperties:[pageTransitions objectAtIndex:idx]];
     
     if ([currentTransition style] == SKNoTransition) {
         

Modified: trunk/SKTransitionInfo.h
===================================================================
--- trunk/SKTransitionInfo.h    2024-10-07 09:40:30 UTC (rev 14522)
+++ trunk/SKTransitionInfo.h    2024-10-07 14:48:20 UTC (rev 14523)
@@ -47,25 +47,23 @@
     SKNoTransition
 };
 
-@interface SKTransitionInfo : NSObject <NSPasteboardReading, 
NSPasteboardWriting> {
+@interface SKTransitionInfo : NSObject <NSCopying, NSPasteboardReading, 
NSPasteboardWriting> {
     SKTransitionStyle style;
     CGFloat duration;
     BOOL shouldRestrict;
 }
 
-@property (nonatomic, copy) NSDictionary *properties;
+- (instancetype)initWithProperties:(NSDictionary *)dictionary;
 
 @property (nonatomic) SKTransitionStyle style;
 @property (nonatomic) CGFloat duration;
 @property (nonatomic) BOOL shouldRestrict;
 
-@property (nonatomic, copy) SKTransitionInfo *info;
+@property (nonatomic, readonly) NSDictionary *properties;
 
 @property (nonatomic, nullable, readonly) NSString *styleName;
 @property (nonatomic, nullable, readonly) NSString *localizedStyleName;
 
-@property (nonatomic, nullable, readonly) NSString *label;
-
 + (void)enumerateTransitionsUsingBlock:(void (^)(SKTransitionStyle style, 
NSString *name, NSString *localizedName))block;
 
 @end
@@ -81,6 +79,10 @@
 
 @property (nonatomic, nullable, strong) SKThumbnail *thumbnail, *toThumbnail;
 
+@property (nonatomic, nullable, readonly) NSString *label;
+
+@property (nonatomic, copy) SKTransitionInfo *info;
+
 @end
 
 NS_ASSUME_NONNULL_END

Modified: trunk/SKTransitionInfo.m
===================================================================
--- trunk/SKTransitionInfo.m    2024-10-07 09:40:30 UTC (rev 14522)
+++ trunk/SKTransitionInfo.m    2024-10-07 14:48:20 UTC (rev 14523)
@@ -51,7 +51,7 @@
 @implementation SKTransitionInfo
 
 @synthesize style, duration, shouldRestrict;
-@dynamic properties, info, styleName, localizedStyleName, label;
+@dynamic properties, styleName, localizedStyleName;
 
 static NSDictionary *oldStyleNames = nil;
 
@@ -117,6 +117,42 @@
     return self;
 }
 
+- (instancetype)initWithTransitionInfo:(SKTransitionInfo *)info {
+    self = [super init];
+    if (self) {
+        style = [info style];
+        duration = [info duration];
+        shouldRestrict = [info shouldRestrict];
+    }
+    return self;
+}
+
+- (instancetype)initWithProperties:(NSDictionary *)dictionary {
+    self = [self init];
+    if (self) {
+        id value;
+        if ((value = [dictionary objectForKey:SKStyleNameKey])) {
+            NSUInteger idx = NSNotFound;
+            if ([value length]) {
+                NSArray *names = [[self class] transitionNames];
+                idx = [names indexOfObject:value];
+                if (idx == NSNotFound && (value = [oldStyleNames 
objectForKey:value]))
+                    idx = [names indexOfObject:value];
+            }
+            style = idx == NSNotFound ? SKNoTransition : idx + 1;
+        }
+        if ((value = [dictionary objectForKey:SKDurationKey]))
+            duration = [value doubleValue];
+        if ((value = [dictionary objectForKey:SKShouldRestrictKey]))
+            shouldRestrict = [value boolValue];
+    }
+    return self;
+}
+
+- (id)copyWithZone:(NSZone *)zone {
+    return self;
+}
+
 + (NSArray *)readableTypesForPasteboard:(NSPasteboard *)pasteboard {
     return @[SKPasteboardTypeTransition];
 }
@@ -138,12 +174,10 @@
 }
 
 - (instancetype)initWithPasteboardPropertyList:(id)propertyList 
ofType:(NSString *)type {
-    if ([type isEqualToString:SKPasteboardTypeTransition]) {
-        self = [self init];
-        [self setProperties:propertyList];
-    } else {
+    if ([type isEqualToString:SKPasteboardTypeTransition])
+        self = [self initWithProperties:propertyList];
+    else
         self = nil;
-    }
     return self;
 }
 
@@ -151,16 +185,6 @@
     return [NSString stringWithFormat:@"<%@ %p> %@", [self class], self, [self 
properties]];
 }
 
-- (SKTransitionInfo *)info {
-    return self;
-}
-
-- (void)setInfo:(SKTransitionInfo *)info {
-    [self setStyle:[info style]];
-    [self setDuration:[info duration]];
-    [self setShouldRestrict:[info shouldRestrict]];
-}
-
 - (NSDictionary *)properties {
     return @{SKStyleNameKey:([self styleName] ?: @""),
              SKDurationKey:[NSNumber numberWithDouble:duration],
@@ -167,26 +191,6 @@
              SKShouldRestrictKey:[NSNumber numberWithBool:shouldRestrict]};
 }
 
-- (void)setProperties:(NSDictionary *)dictionary {
-    id value;
-    if ((value = [dictionary objectForKey:SKStyleNameKey])) {
-        NSUInteger idx = NSNotFound;
-        if ([value length]) {
-            NSArray *names = [[self class] transitionNames];
-            idx = [names indexOfObject:value];
-            if (idx == NSNotFound && (value = [oldStyleNames 
objectForKey:value]))
-                idx = [names indexOfObject:value];
-        }
-        [self setStyle:idx == NSNotFound ? SKNoTransition : idx + 1];
-    }
-    if ((value = [dictionary objectForKey:SKDurationKey])) {
-        [self setDuration:[value doubleValue]];
-    }
-    if ((value = [dictionary objectForKey:SKShouldRestrictKey])) {
-        [self setShouldRestrict:[value boolValue]];
-    }
-}
-
 - (NSString *)styleName {
     if (style > SKNoTransition) {
         NSArray *names = [[self class] transitionNames];
@@ -203,10 +207,6 @@
     return NSLocalizedString(@"No Transition", @"Transition name");
 }
 
-- (NSString *)label {
-    return nil;
-}
-
 @end
 
 #pragma mark -
@@ -213,7 +213,7 @@
 
 @implementation SKLabeledTransitionInfo
 
-@synthesize thumbnail, toThumbnail;
+@synthesize thumbnail, toThumbnail, info, label;
 
 + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
     NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
@@ -224,6 +224,20 @@
     return keyPaths;
 }
 
+- (id)copyWithZone:(NSZone *)zone {
+    return [[SKTransitionInfo alloc] initWithTransitionInfo:self];
+}
+
+- (SKTransitionInfo *)info {
+    return [[SKTransitionInfo alloc] initWithTransitionInfo:self];
+}
+
+- (void)setInfo:(SKTransitionInfo *)info {
+    [self setStyle:[info style]];
+    [self setDuration:[info duration]];
+    [self setShouldRestrict:[info shouldRestrict]];
+}
+
 - (NSString *)label {
     if ([self thumbnail] && [self toThumbnail])
         return [NSString stringWithFormat:@"%@\u2192%@", [[self thumbnail] 
label], [[self toThumbnail] label]];

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



_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to