Revision: 15058
http://sourceforge.net/p/skim-app/code/15058
Author: hofman
Date: 2025-03-31 14:52:02 +0000 (Mon, 31 Mar 2025)
Log Message:
-----------
Convenience method to do KVC part of binding for custom cuntrols. Set the
actual values we have set rather then retrieving it back using valueForKey, it
may have been changed due to KVO.
Modified Paths:
--------------
trunk/NSObject_SKExtensions.h
trunk/NSObject_SKExtensions.m
trunk/SKColorSwatch.m
trunk/SKFontWell.m
trunk/SKLineWell.m
Modified: trunk/NSObject_SKExtensions.h
===================================================================
--- trunk/NSObject_SKExtensions.h 2025-03-30 14:59:44 UTC (rev 15057)
+++ trunk/NSObject_SKExtensions.h 2025-03-31 14:52:02 UTC (rev 15058)
@@ -50,6 +50,8 @@
- (nullable id)handleFormatScriptCommand:(NSScriptCommand *)command;
+- (void)propagateValue:(nullable id)value forBinding:(NSString *)binding;
+
@end
NS_ASSUME_NONNULL_END
Modified: trunk/NSObject_SKExtensions.m
===================================================================
--- trunk/NSObject_SKExtensions.m 2025-03-30 14:59:44 UTC (rev 15057)
+++ trunk/NSObject_SKExtensions.m 2025-03-31 14:52:02 UTC (rev 15058)
@@ -116,4 +116,22 @@
return text;
}
+- (void)propagateValue:(id)value forBinding:(NSString *)binding {
+ NSDictionary *info = [self infoForBinding:binding];
+ id observedObject = [info objectForKey:NSObservedObjectKey];
+ NSString *observedKeyPath = [info objectForKey:NSObservedKeyPathKey];
+ if (observedObject && observedKeyPath) {
+ NSValueTransformer *valueTransformer = [[info
objectForKey:NSOptionsKey] objectForKey:NSValueTransformerBindingOption];
+ if (valueTransformer == nil || [valueTransformer isEqual:[NSNull
null]]) {
+ NSString *transformerName = [[info objectForKey:NSOptionsKey]
objectForKey:NSValueTransformerNameBindingOption];
+ if (transformerName && [transformerName isEqual:[NSNull null]] ==
NO)
+ valueTransformer = [NSValueTransformer
valueTransformerForName:transformerName];
+ }
+ if (valueTransformer && [valueTransformer isEqual:[NSNull null]] == NO
&&
+ [[valueTransformer class] allowsReverseTransformation])
+ value = [valueTransformer reverseTransformedValue:value];
+ [observedObject setValue:value forKeyPath:observedKeyPath];
+ }
+}
+
@end
Modified: trunk/SKColorSwatch.m
===================================================================
--- trunk/SKColorSwatch.m 2025-03-30 14:59:44 UTC (rev 15057)
+++ trunk/SKColorSwatch.m 2025-03-31 14:52:02 UTC (rev 15058)
@@ -44,6 +44,7 @@
#import "NSView_SKExtensions.h"
#import "NSGraphics_SKExtensions.h"
#import "NSShadow_SKExtensions.h"
+#import "NSObject_SKExtensions.h"
NSString *SKColorSwatchOrWellWillActivateNotification =
@"SKColorSwatchOrWellWillActivateNotification";
@@ -571,23 +572,7 @@
- (void)didChangeColors {
[self didChangeValueForKey:COLORS_KEY];
-
- NSDictionary *info = [self infoForBinding:COLORS_KEY];
- id observedObject = [info objectForKey:NSObservedObjectKey];
- NSString *observedKeyPath = [info objectForKey:NSObservedKeyPathKey];
- if (observedObject && observedKeyPath) {
- id value = [self colors];
- NSValueTransformer *valueTransformer = [[info
objectForKey:NSOptionsKey] objectForKey:NSValueTransformerBindingOption];
- if (valueTransformer == nil || [valueTransformer isEqual:[NSNull
null]]) {
- NSString *transformerName = [[info objectForKey:NSOptionsKey]
objectForKey:NSValueTransformerNameBindingOption];
- if (transformerName && [transformerName isEqual:[NSNull null]] ==
NO)
- valueTransformer = [NSValueTransformer
valueTransformerForName:transformerName];
- }
- if (valueTransformer && [valueTransformer isEqual:[NSNull null]] == NO
&&
- [[valueTransformer class] allowsReverseTransformation])
- value = [valueTransformer reverseTransformedValue:value];
- [observedObject setValue:value forKeyPath:observedKeyPath];
- }
+ [self propagateValue:[self colors] forBinding:COLORS_KEY];
}
- (void)_setColor:(NSColor *)color atIndex:(NSInteger)i {
Modified: trunk/SKFontWell.m
===================================================================
--- trunk/SKFontWell.m 2025-03-30 14:59:44 UTC (rev 15057)
+++ trunk/SKFontWell.m 2025-03-31 14:52:02 UTC (rev 15058)
@@ -39,6 +39,7 @@
#import "SKFontWell.h"
#import "NSGraphics_SKExtensions.h"
#import "NSColor_SKExtensions.h"
+#import "NSObject_SKExtensions.h"
#define SKNSFontPanelDescriptorsPboardType @"NSFontPanelDescriptorsPboardType"
#define SKNSFontPanelFamiliesPboardType @"NSFontPanelFamiliesPboardType"
@@ -164,28 +165,12 @@
[self setNeedsDisplay:YES];
}
-- (void)notifyBinding:(NSString *)binding {
- NSDictionary *info = [self infoForBinding:binding];
- if (info) {
- id value = [self valueForKey:binding];
- NSValueTransformer *valueTransformer = [[info
objectForKey:NSOptionsKey] objectForKey:NSValueTransformerBindingOption];
- if (valueTransformer == nil || [valueTransformer isEqual:[NSNull
null]]) {
- NSString *transformerName = [[info objectForKey:NSOptionsKey]
objectForKey:NSValueTransformerNameBindingOption];
- if (transformerName && [transformerName isEqual:[NSNull null]] ==
NO)
- valueTransformer = [NSValueTransformer
valueTransformerForName:transformerName];
- }
- if (valueTransformer && [valueTransformer isEqual:[NSNull null]] == NO
&&
- [[valueTransformer class] allowsReverseTransformation])
- value = [valueTransformer reverseTransformedValue:value];
- [[info objectForKey:NSObservedObjectKey] setValue:value
forKeyPath:[info objectForKey:NSObservedKeyPathKey]];
- }
-}
-
- (void)changeFontFromFontManager:(id)sender {
if ([self isActive]) {
- [self setFont:[sender convertFont:[self font]]];
- [self notifyBinding:FONTNAME_KEY];
- [self notifyBinding:FONTSIZE_KEY];
+ NSFont *font = [sender convertFont:[self font]];
+ [self setFont:font];
+ [self propagateValue:[font fontName] forBinding:FONTNAME_KEY];
+ [self propagateValue:[NSNumber numberWithDouble:[font pointSize]]
forBinding:FONTSIZE_KEY];
[self sendAction:[self action] to:[self target]];
}
}
@@ -192,8 +177,9 @@
- (void)changeAttributesFromFontManager:(id)sender {
if ([self isActive] && [self hasTextColor]) {
- [self setTextColor:[[sender
convertAttributes:@{NSForegroundColorAttributeName:[self textColor] ?: [NSColor
blackColor]}] valueForKey:NSForegroundColorAttributeName]];
- [self notifyBinding:TEXTCOLOR_KEY];
+ NSColor *color = [[sender
convertAttributes:@{NSForegroundColorAttributeName:[self textColor] ?: [NSColor
blackColor]}] valueForKey:NSForegroundColorAttributeName];
+ [self setTextColor:color];
+ [self propagateValue:color forBinding:TEXTCOLOR_KEY];
[self sendAction:[self action] to:[self target]];
}
}
@@ -419,13 +405,13 @@
if (droppedFont) {
[self setFont:droppedFont];
- [self notifyBinding:FONTNAME_KEY];
- [self notifyBinding:FONTSIZE_KEY];
+ [self propagateValue:[droppedFont fontName] forBinding:FONTNAME_KEY];
+ [self propagateValue:[NSNumber numberWithDouble:[droppedFont
pointSize]] forBinding:FONTSIZE_KEY];
[self sendAction:[self action] to:[self target]];
}
if (droppedColor) {
[self setTextColor:droppedColor];
- [self notifyBinding:TEXTCOLOR_KEY];
+ [self propagateValue:droppedColor forBinding:TEXTCOLOR_KEY];
[self sendAction:[self action] to:[self target]];
}
Modified: trunk/SKLineWell.m
===================================================================
--- trunk/SKLineWell.m 2025-03-30 14:59:44 UTC (rev 15057)
+++ trunk/SKLineWell.m 2025-03-31 14:52:02 UTC (rev 15058)
@@ -41,6 +41,7 @@
#import "NSGraphics_SKExtensions.h"
#import "NSBezierPath_SKExtensions.h"
#import "NSView_SKExtensions.h"
+#import "NSObject_SKExtensions.h"
NSString *SKPasteboardTypeLineStyle =
@"net.sourceforge.skim-app.pasteboard.line-style";
@@ -312,9 +313,9 @@
}
- (void)takeValueForKey:(NSString *)key from:(id)object {
- [self setValue:[object valueForKey:key] forKey:key];
- NSDictionary *info = [self infoForBinding:key];
- [[info objectForKey:NSObservedObjectKey] setValue:[self valueForKey:key]
forKeyPath:[info objectForKey:NSObservedKeyPathKey]];
+ id value = [object valueForKey:key];
+ [self setValue:value forKey:key];
+ [self propagateValue:value forBinding:key];
}
- (void)mouseDown:(NSEvent *)theEvent {
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