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