diff --git a/src/Foundation/Enums.cs b/src/Foundation/Enums.cs index b0fe4dac54..f6bfef68ee 100644 --- a/src/Foundation/Enums.cs +++ b/src/Foundation/Enums.cs @@ -25,7 +25,6 @@ namespace Foundation { } // Utility enum, ObjC uses NSString - [NoMac] public enum NSDocumentViewMode { Normal, PageLayout diff --git a/src/Foundation/NSAttributedString.iOS.cs b/src/Foundation/NSAttributedString.iOS.cs deleted file mode 100644 index 30d1eb7a67..0000000000 --- a/src/Foundation/NSAttributedString.iOS.cs +++ /dev/null @@ -1,276 +0,0 @@ -// -// UIStringAttributes.cs: Implements strongly typed access to UIKit specific part of UIStringAttributeKey -// -// Authors: Marek Safar (marek.safar@gmail.com) -// -// Copyright 2012-2013, Xamarin Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#nullable enable - -using System; - -using ObjCRuntime; -using Foundation; -using CoreGraphics; - -#if !MONOMAC -using UIKit; -#endif - -namespace Foundation { - - public partial class NSAttributedStringDocumentAttributes : DictionaryContainer { -#if !MONOMAC && !COREBUILD - public NSAttributedStringDocumentAttributes () : base (new NSMutableDictionary ()) { } - public NSAttributedStringDocumentAttributes (NSDictionary? dictionary) : base (dictionary) { } - - public NSStringEncoding? StringEncoding { - get { - var value = GetInt32Value (NSAttributedStringDocumentAttributeKey.NSCharacterEncodingDocumentAttribute); - if (value is null) - return null; - else - return (NSStringEncoding) value.Value; - } - set { - SetNumberValue (NSAttributedStringDocumentAttributeKey.NSCharacterEncodingDocumentAttribute, (int?) value); - } - } - - public NSString? WeakDocumentType { - get { - return GetNSStringValue (NSAttributedStringDocumentAttributeKey.NSDocumentTypeDocumentAttribute); - } - set { - SetStringValue (NSAttributedStringDocumentAttributeKey.NSDocumentTypeDocumentAttribute, value); - } - } - - public NSDocumentType DocumentType { - get { - var s = GetNSStringValue (NSAttributedStringDocumentAttributeKey.NSDocumentTypeDocumentAttribute); - if (s == NSAttributedStringDocumentType.NSPlainTextDocumentType) - return NSDocumentType.PlainText; - if (s == NSAttributedStringDocumentType.NSRtfdTextDocumentType) - return NSDocumentType.RTFD; - if (s == NSAttributedStringDocumentType.NSRtfTextDocumentType) - return NSDocumentType.RTF; - if (s == NSAttributedStringDocumentType.NSHtmlTextDocumentType) - return NSDocumentType.HTML; - return NSDocumentType.Unknown; - } - - set { - switch (value) { - case NSDocumentType.PlainText: - SetStringValue (NSAttributedStringDocumentAttributeKey.NSDocumentTypeDocumentAttribute, NSAttributedStringDocumentType.NSPlainTextDocumentType); - break; - case NSDocumentType.RTFD: - SetStringValue (NSAttributedStringDocumentAttributeKey.NSDocumentTypeDocumentAttribute, NSAttributedStringDocumentType.NSRtfdTextDocumentType); - break; - case NSDocumentType.RTF: - SetStringValue (NSAttributedStringDocumentAttributeKey.NSDocumentTypeDocumentAttribute, NSAttributedStringDocumentType.NSRtfTextDocumentType); - break; - case NSDocumentType.HTML: - SetStringValue (NSAttributedStringDocumentAttributeKey.NSDocumentTypeDocumentAttribute, NSAttributedStringDocumentType.NSHtmlTextDocumentType); - break; - } - } - } - - public CGSize? PaperSize { - get { - NSObject value; - Dictionary.TryGetValue (NSAttributedStringDocumentAttributeKey.NSPaperSizeDocumentAttribute, out value); - var size = value as NSValue; - if (size != null) - return size.CGSizeValue; - return null; - } - set { - if (value is null) - RemoveValue (NSAttributedStringDocumentAttributeKey.NSPaperSizeDocumentAttribute); - else - Dictionary [NSAttributedStringDocumentAttributeKey.NSPaperSizeDocumentAttribute] = NSValue.FromCGSize (value.Value); - } - } - - public UIEdgeInsets? PaperMargin { - get { - NSObject value; - Dictionary.TryGetValue (NSAttributedStringDocumentAttributeKey.NSPaperMarginDocumentAttribute, out value); - var size = value as NSValue; - if (size != null) - return size.UIEdgeInsetsValue; - return null; - } - set { - if (value is null) - RemoveValue (NSAttributedStringDocumentAttributeKey.NSPaperMarginDocumentAttribute); - else - Dictionary [NSAttributedStringDocumentAttributeKey.NSPaperMarginDocumentAttribute] = NSValue.FromUIEdgeInsets (value.Value); - } - } - - public CGSize? ViewSize { - get { - NSObject value; - Dictionary.TryGetValue (NSAttributedStringDocumentAttributeKey.NSViewSizeDocumentAttribute, out value); - var size = value as NSValue; - if (size != null) - return size.CGSizeValue; - return null; - } - set { - if (value is null) - RemoveValue (NSAttributedStringDocumentAttributeKey.NSViewSizeDocumentAttribute); - else - Dictionary [NSAttributedStringDocumentAttributeKey.NSViewSizeDocumentAttribute] = NSValue.FromCGSize (value.Value); - } - } - - public float? ViewZoom { - get { - return GetFloatValue (NSAttributedStringDocumentAttributeKey.NSViewZoomDocumentAttribute); - } - set { - if (value is null) - RemoveValue (NSAttributedStringDocumentAttributeKey.NSViewZoomDocumentAttribute); - else - SetNumberValue (NSAttributedStringDocumentAttributeKey.NSViewZoomDocumentAttribute, value); - } - } - - public NSDocumentViewMode? ViewMode { - get { - var value = GetInt32Value (NSAttributedStringDocumentAttributeKey.NSViewModeDocumentAttribute); - if (value is null) - return null; - else - return (NSDocumentViewMode) value.Value; - } - set { - if (value is null) - RemoveValue (NSAttributedStringDocumentAttributeKey.NSViewModeDocumentAttribute); - else - SetNumberValue (NSAttributedStringDocumentAttributeKey.NSViewModeDocumentAttribute, (int) value.Value); - } - } - - public bool ReadOnly { - get { - var value = GetInt32Value (NSAttributedStringDocumentAttributeKey.NSReadOnlyDocumentAttribute); - if (value is null || value.Value <= 0) - return false; - return true; - } - set { - SetNumberValue (NSAttributedStringDocumentAttributeKey.NSReadOnlyDocumentAttribute, value ? 1 : 0); - } - } - - public UIColor? BackgroundColor { - get { - NSObject? value; - Dictionary.TryGetValue (NSAttributedStringDocumentAttributeKey.NSBackgroundColorDocumentAttribute, out value); - return value as UIColor; - } - set { - if (value is null) - RemoveValue (NSAttributedStringDocumentAttributeKey.NSBackgroundColorDocumentAttribute); - else - Dictionary [NSAttributedStringDocumentAttributeKey.NSBackgroundColorDocumentAttribute] = value; - } - } - - public float? HyphenationFactor { - get { - return GetFloatValue (NSAttributedStringDocumentAttributeKey.NSHyphenationFactorDocumentAttribute); - } - set { - if (value is null) - RemoveValue (NSAttributedStringDocumentAttributeKey.NSHyphenationFactorDocumentAttribute); - else { - if (value < 0 || value > 1.0f) - throw new ArgumentException ("value must be between 0 and 1"); - SetNumberValue (NSAttributedStringDocumentAttributeKey.NSHyphenationFactorDocumentAttribute, value); - } - } - } - - public float? DefaultTabInterval { - get { - return GetFloatValue (NSAttributedStringDocumentAttributeKey.NSDefaultTabIntervalDocumentAttribute); - } - set { - if (value is null) - RemoveValue (NSAttributedStringDocumentAttributeKey.NSDefaultTabIntervalDocumentAttribute); - else { - if (value < 0 || value > 1.0f) - throw new ArgumentException ("value must be between 0 and 1"); - SetNumberValue (NSAttributedStringDocumentAttributeKey.NSDefaultTabIntervalDocumentAttribute, value); - } - } - } - - public NSDictionary? WeakDefaultAttributes { - get { - NSObject? value; - Dictionary.TryGetValue (NSAttributedStringDocumentAttributeKey.NSDefaultAttributesDocumentAttribute, out value); - return value as NSDictionary; - } - set { - if (value is null) - RemoveValue (NSAttributedStringDocumentAttributeKey.NSDefaultAttributesDocumentAttribute); - else - Dictionary [NSAttributedStringDocumentAttributeKey.NSDefaultAttributesDocumentAttribute] = value; - } - } -#endif -#if !COREBUILD && !TVOS && !WATCH - // documentation is unclear if an NSString or an NSUrl should be used... - // but providing an `NSString` throws a `NSInvalidArgumentException Reason: (null) is not a file URL` -#if NET - [SupportedOSPlatform ("macos10.15")] - [SupportedOSPlatform ("ios13.0")] - [SupportedOSPlatform ("maccatalyst")] - [UnsupportedOSPlatform ("tvos")] -#else - [Mac (10, 15)] - [iOS (13, 0)] -#endif - public NSUrl? ReadAccessUrl { - get { - Dictionary.TryGetValue (NSAttributedStringDocumentReadingOptionKeys.ReadAccessUrlKey, out var value); - return value as NSUrl; - } - set { - if (value is null) - RemoveValue (NSAttributedStringDocumentReadingOptionKeys.ReadAccessUrlKey); - else - Dictionary [NSAttributedStringDocumentReadingOptionKeys.ReadAccessUrlKey] = value; - } - } -#endif - } -} diff --git a/src/Foundation/NSAttributedString.mac.cs b/src/Foundation/NSAttributedString.mac.cs index 17cbcac353..078f350d5c 100644 --- a/src/Foundation/NSAttributedString.mac.cs +++ b/src/Foundation/NSAttributedString.mac.cs @@ -136,164 +136,6 @@ namespace Foundation return attr is null ? null : new NSStringAttributes (attr); } } - - public partial class NSAttributedStringDocumentAttributes : DictionaryContainer { - public NSAttributedStringDocumentAttributes () : base (new NSMutableDictionary ()) {} - public NSAttributedStringDocumentAttributes (NSDictionary dictionary) : base (dictionary) {} - - public WebPreferences? WebPreferences { - get { - NSObject value; - Dictionary.TryGetValue (NSStringAttributeKey.NSWebPreferencesDocumentOption, out value); - return value as WebPreferences; - } - set { - if (value is null) - RemoveValue (NSStringAttributeKey.NSWebPreferencesDocumentOption); - else - Dictionary [NSStringAttributeKey.NSWebPreferencesDocumentOption] = value; - } - } - public NSObject? WebResourceLoadDelegate { - get { - NSObject value; - Dictionary.TryGetValue (NSStringAttributeKey.NSWebResourceLoadDelegateDocumentOption, out value); - return value; - } - set { - if (value is null) - RemoveValue (NSStringAttributeKey.NSWebResourceLoadDelegateDocumentOption); - else - Dictionary [NSStringAttributeKey.NSWebResourceLoadDelegateDocumentOption] = value; - } - } - - public NSStringEncoding? StringEncoding { - get { - var value = GetInt32Value (NSStringAttributeKey.NSCharacterEncodingDocumentOption); - if (value is null) - return null; - else - return (NSStringEncoding) value.Value; - } - set { - SetNumberValue (NSStringAttributeKey.NSCharacterEncodingDocumentOption, (int?) value); - } - } - - public NSString? WeakDocumentType { - get { - return GetNSStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption); - } - set { - SetStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption, value); - } - } - - public NSDocumentType DocumentType { - get { - var s = GetNSStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption); - - if (s == NSAttributedStringDocumentType.NSPlainTextDocumentType) - return NSDocumentType.PlainText; - if (s == NSAttributedStringDocumentType.NSRtfTextDocumentType) - return NSDocumentType.RTF; - if (s == NSAttributedStringDocumentType.NSRtfdTextDocumentType) - return NSDocumentType.RTFD; - if (s == NSAttributedStringDocumentType.NSMacSimpleTextDocumentType) - return NSDocumentType.MacSimpleText; - if (s == NSAttributedStringDocumentType.NSHtmlTextDocumentType) - return NSDocumentType.HTML; - if (s == NSAttributedStringDocumentType.NSDocFormatTextDocumentType) - return NSDocumentType.DocFormat; - if (s == NSAttributedStringDocumentType.NSWordMLTextDocumentType) - return NSDocumentType.WordML; - if (s == NSAttributedStringDocumentType.NSWebArchiveTextDocumentType) - return NSDocumentType.WebArchive; - if (s == NSAttributedStringDocumentType.NSOfficeOpenXMLTextDocumentType) - return NSDocumentType.OfficeOpenXml; - if (s == NSAttributedStringDocumentType.NSOpenDocumentTextDocumentType) - return NSDocumentType.OpenDocument; - return NSDocumentType.Unknown; - } - - set { - switch (value){ - case NSDocumentType.PlainText: - SetStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption, NSAttributedStringDocumentType.NSPlainTextDocumentType); - break; - case NSDocumentType.RTFD: - SetStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption, NSAttributedStringDocumentType.NSRtfdTextDocumentType); - break; - case NSDocumentType.RTF: - SetStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption, NSAttributedStringDocumentType.NSRtfTextDocumentType); - break; - case NSDocumentType.HTML: - SetStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption, NSAttributedStringDocumentType.NSHtmlTextDocumentType); - break; - case NSDocumentType.MacSimpleText: - SetStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption, NSAttributedStringDocumentType.NSMacSimpleTextDocumentType); - break; - case NSDocumentType.DocFormat: - SetStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption, NSAttributedStringDocumentType.NSDocFormatTextDocumentType); - break; - case NSDocumentType.WordML: - SetStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption, NSAttributedStringDocumentType.NSWordMLTextDocumentType); - break; - case NSDocumentType.WebArchive: - SetStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption, NSAttributedStringDocumentType.NSWebArchiveTextDocumentType); - break; - case NSDocumentType.OfficeOpenXml: - SetStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption, NSAttributedStringDocumentType.NSOfficeOpenXMLTextDocumentType); - break; - case NSDocumentType.OpenDocument: - SetStringValue (NSStringAttributeKey.NSDocumentTypeDocumentOption, NSAttributedStringDocumentType.NSOpenDocumentTextDocumentType); - break; - } - } - } - - public NSDictionary? WeakDefaultAttributes { - get { - NSObject value; - Dictionary.TryGetValue (NSStringAttributeKey.NSDefaultAttributesDocumentOption, out value); - return value as NSDictionary; - } - set { - if (value is null) - RemoveValue (NSStringAttributeKey.NSDefaultAttributesDocumentOption); - else - Dictionary [NSStringAttributeKey.NSDefaultAttributesDocumentOption] = value; - } - } - - public NSUrl? BaseUrl { - get { - return GetNativeValue (NSStringAttributeKey.NSBaseURLDocumentOption); - } - set { - SetNativeValue (NSStringAttributeKey.NSBaseURLDocumentOption, value); - } - } - - public string? TextEncodingName { - get { - return (string)GetNSStringValue (NSStringAttributeKey.NSTextEncodingNameDocumentOption); - } - set { - SetStringValue (NSStringAttributeKey.NSTextEncodingNameDocumentOption, (NSString)value); - } - } - public float? TextSizeMultiplier { - get { return GetFloatValue (NSStringAttributeKey.NSTextSizeMultiplierDocumentOption); } - set { SetNumberValue (NSStringAttributeKey.NSTextSizeMultiplierDocumentOption, (float?) value); } - } - - public float? Timeout { - get { return GetFloatValue (NSStringAttributeKey.NSTimeoutDocumentOption); } - set { SetNumberValue (NSStringAttributeKey.NSTimeoutDocumentOption, (float?)value); } - } - } } #endif // MONOMAC diff --git a/src/Foundation/NSAttributedStringDocumentAttributes.cs b/src/Foundation/NSAttributedStringDocumentAttributes.cs new file mode 100644 index 0000000000..78674a4b7c --- /dev/null +++ b/src/Foundation/NSAttributedStringDocumentAttributes.cs @@ -0,0 +1,383 @@ +// +// NSAttributedStringDocumentAttributes.cs +// +// Authors: +// Rolf Bjarne Kvinge (rolf@xamarin.com) +// +// Copyright 2022 Microsoft Corp + +#nullable enable + +using System; + +#if HAS_APPKIT +using AppKit; +#endif +using CoreGraphics; +using Foundation; +#if HAS_UIKIT +using UIKit; +#endif +#if !COREBUILD && HAS_WEBKIT +using WebKit; +#endif + +#if !COREBUILD +#if __MACOS__ +using XColor = AppKit.NSColor; +#else +using XColor = UIKit.UIColor; +#endif +#endif + +namespace Foundation { + public partial class NSAttributedStringDocumentAttributes : DictionaryContainer { +#if !COREBUILD + public NSAttributedStringDocumentAttributes () { } + public NSAttributedStringDocumentAttributes (NSDictionary? dictionary) : base (dictionary) { } + + public XColor? BackgroundColor { + get { + return GetNativeValue (NSAttributedStringDocumentAttributeKey.NSBackgroundColorDocumentAttribute); + } + set { + SetNativeValue (NSAttributedStringDocumentAttributeKey.NSBackgroundColorDocumentAttribute, value); + } + } + + public float? DefaultTabInterval { + get { + return GetFloatValue (NSAttributedStringDocumentAttributeKey.NSDefaultTabIntervalDocumentAttribute); + } + set { + if (value < 0 || value > 1.0f) + throw new ArgumentOutOfRangeException (nameof (value), value, "Value must be between 0 and 1"); + + SetNumberValue (NSAttributedStringDocumentAttributeKey.NSDefaultTabIntervalDocumentAttribute, value); + } + } + + public float? HyphenationFactor { + get { + return GetFloatValue (NSAttributedStringDocumentAttributeKey.NSHyphenationFactorDocumentAttribute); + } + set { + if (value < 0 || value > 1.0f) + throw new ArgumentOutOfRangeException (nameof (value), value, "Value must be between 0 and 1"); + + SetNumberValue (NSAttributedStringDocumentAttributeKey.NSHyphenationFactorDocumentAttribute, value); + } + } + + public NSStringEncoding? StringEncoding { + get { + return (NSStringEncoding?) (long?) GetNIntValue (NSAttributedStringDocumentAttributeKey.NSCharacterEncodingDocumentAttribute); + } + set { + SetNumberValue (NSAttributedStringDocumentAttributeKey.NSCharacterEncodingDocumentAttribute, (nint?) (long?) value); + } + } + + public NSString? WeakDocumentType { + get { + return GetNSStringValue (NSAttributedStringDocumentAttributeKey.NSDocumentTypeDocumentAttribute); + } + set { + SetStringValue (NSAttributedStringDocumentAttributeKey.NSDocumentTypeDocumentAttribute, value); + } + } + + public NSDocumentType DocumentType { + get { + var s = WeakDocumentType; + + if (s == NSAttributedStringDocumentType.NSPlainTextDocumentType) + return NSDocumentType.PlainText; + if (s == NSAttributedStringDocumentType.NSRtfdTextDocumentType) + return NSDocumentType.RTFD; + if (s == NSAttributedStringDocumentType.NSRtfTextDocumentType) + return NSDocumentType.RTF; + if (s == NSAttributedStringDocumentType.NSHtmlTextDocumentType) + return NSDocumentType.HTML; + +#if __MACOS__ + if (s == NSAttributedStringDocumentType.NSMacSimpleTextDocumentType) + return NSDocumentType.MacSimpleText; + if (s == NSAttributedStringDocumentType.NSDocFormatTextDocumentType) + return NSDocumentType.DocFormat; + if (s == NSAttributedStringDocumentType.NSWordMLTextDocumentType) + return NSDocumentType.WordML; + if (s == NSAttributedStringDocumentType.NSWebArchiveTextDocumentType) + return NSDocumentType.WebArchive; + if (s == NSAttributedStringDocumentType.NSOfficeOpenXMLTextDocumentType) + return NSDocumentType.OfficeOpenXml; + if (s == NSAttributedStringDocumentType.NSOpenDocumentTextDocumentType) + return NSDocumentType.OpenDocument; +#endif // __MACOS__ + + return NSDocumentType.Unknown; + } + + set { + NSString? documentType = null; + switch (value) { + case NSDocumentType.PlainText: + documentType = NSAttributedStringDocumentType.NSPlainTextDocumentType; + break; + case NSDocumentType.RTFD: + documentType = NSAttributedStringDocumentType.NSRtfdTextDocumentType; + break; + case NSDocumentType.RTF: + documentType = NSAttributedStringDocumentType.NSRtfTextDocumentType; + break; + case NSDocumentType.HTML: + documentType = NSAttributedStringDocumentType.NSHtmlTextDocumentType; + break; +#if __MACOS__ + case NSDocumentType.MacSimpleText: + documentType = NSAttributedStringDocumentType.NSMacSimpleTextDocumentType; + break; + case NSDocumentType.DocFormat: + documentType = NSAttributedStringDocumentType.NSDocFormatTextDocumentType; + break; + case NSDocumentType.WordML: + documentType = NSAttributedStringDocumentType.NSWordMLTextDocumentType; + break; + case NSDocumentType.WebArchive: + documentType = NSAttributedStringDocumentType.NSWebArchiveTextDocumentType; + break; + case NSDocumentType.OfficeOpenXml: + documentType = NSAttributedStringDocumentType.NSOfficeOpenXMLTextDocumentType; + break; + case NSDocumentType.OpenDocument: + documentType = NSAttributedStringDocumentType.NSOpenDocumentTextDocumentType; + break; +#endif // __MACOS__ + } + + if (documentType is not null) + WeakDocumentType = documentType; + } + } + + public NSDictionary? WeakDefaultAttributes { + get { + return GetNativeValue (NSAttributedStringDocumentAttributeKey.NSDefaultAttributesDocumentAttribute); + } + set { + SetNativeValue (NSAttributedStringDocumentAttributeKey.NSDefaultAttributesDocumentAttribute, value); + } + } + + public CGSize? PaperSize { + get { + return GetCGSizeValue (NSAttributedStringDocumentAttributeKey.NSPaperSizeDocumentAttribute); + } + set { + SetCGSizeValue (NSAttributedStringDocumentAttributeKey.NSPaperSizeDocumentAttribute, value); + } + } + +#if !__MACOS__ +#if NET + [SupportedOSPlatform ("ios")] + [SupportedOSPlatform ("tvos")] + [SupportedOSPlatform ("maccatalyst")] + [UnsupportedOSPlatform ("macos")] +#endif // NET + public UIEdgeInsets? PaperMargin { + get { + if (!Dictionary.TryGetValue (NSAttributedStringDocumentAttributeKey.NSPaperMarginDocumentAttribute, out var value)) + return null; + + if (value is NSValue size) + return size.UIEdgeInsetsValue; + + return null; + } + set { + SetNativeValue (NSAttributedStringDocumentAttributeKey.NSPaperMarginDocumentAttribute, value is null ? null : NSValue.FromUIEdgeInsets (value.Value)); + } + } +#endif // !__MACOS__ + + public CGSize? ViewSize { + get { + return GetCGSizeValue (NSAttributedStringDocumentAttributeKey.NSViewSizeDocumentAttribute); + } + set { + SetCGSizeValue (NSAttributedStringDocumentAttributeKey.NSViewSizeDocumentAttribute, value); + } + } + + public float? ViewZoom { + get { + return GetFloatValue (NSAttributedStringDocumentAttributeKey.NSViewZoomDocumentAttribute); + } + set { + SetNumberValue (NSAttributedStringDocumentAttributeKey.NSViewZoomDocumentAttribute, value); + } + } + + public NSDocumentViewMode? ViewMode { + get { + return (NSDocumentViewMode?) GetInt32Value (NSAttributedStringDocumentAttributeKey.NSViewModeDocumentAttribute); + } + set { + SetNumberValue (NSAttributedStringDocumentAttributeKey.NSViewModeDocumentAttribute, value is null ? null : (int) value.Value); + } + } + +#if XAMCORE_5_0 || __MACOS__ + public bool? ReadOnly { + get { + var value = GetInt32Value (NSAttributedStringDocumentAttributeKey.NSReadOnlyDocumentAttribute); + if (value is null) + return null; + return value.Value == 1; + } + set { + SetNumberValue (NSAttributedStringDocumentAttributeKey.NSReadOnlyDocumentAttribute, value is null ? null : (value.Value ? 1 : 0)); + } + } +#else + public bool ReadOnly { + get { + var value = GetInt32Value (NSAttributedStringDocumentAttributeKey.NSReadOnlyDocumentAttribute); + if (value is null || value.Value != 1) + return false; + return true; + } + set { + SetNumberValue (NSAttributedStringDocumentAttributeKey.NSReadOnlyDocumentAttribute, value ? 1 : 0); + } + } +#endif // XAMCORE_5_0 || __MACOS__ + +#if !TVOS && !WATCH + // documentation is unclear if an NSString or an NSUrl should be used... + // but providing an `NSString` throws a `NSInvalidArgumentException Reason: (null) is not a file URL` +#if NET + [SupportedOSPlatform ("macos10.15")] + [SupportedOSPlatform ("ios13.0")] + [SupportedOSPlatform ("maccatalyst")] + [UnsupportedOSPlatform ("tvos")] +#else + [Mac (10, 15)] + [iOS (13, 0)] +#endif + public NSUrl? ReadAccessUrl { + get { + return GetNativeValue (NSAttributedStringDocumentReadingOptionKeys.ReadAccessUrlKey); + } + set { + SetNativeValue (NSAttributedStringDocumentReadingOptionKeys.ReadAccessUrlKey, value); + } + } +#endif // !TVOS && !WATCH + +#if __MACOS__ +#if NET + [UnsupportedOSPlatform ("ios")] + [UnsupportedOSPlatform ("tvos")] + [UnsupportedOSPlatform ("maccatalyst")] + [SupportedOSPlatform ("macos")] +#endif // NET + public WebPreferences? WebPreferences { + get { + return GetNativeValue (NSAttributedStringDocumentReadingOptionKey.NSWebPreferencesDocumentOption); + } + set { + SetNativeValue (NSAttributedStringDocumentReadingOptionKey.NSWebPreferencesDocumentOption, value); + } + } +#endif // !__MACOS__ + +#if __MACOS__ +#if NET + [UnsupportedOSPlatform ("ios")] + [UnsupportedOSPlatform ("tvos")] + [UnsupportedOSPlatform ("maccatalyst")] + [SupportedOSPlatform ("macos")] +#endif // NET + public NSObject? WebResourceLoadDelegate { + get { + return GetNativeValue (NSAttributedStringDocumentReadingOptionKey.NSWebResourceLoadDelegateDocumentOption); + } + set { + SetNativeValue (NSAttributedStringDocumentReadingOptionKey.NSWebResourceLoadDelegateDocumentOption, value); + } + } +#endif // !__MACOS__ + +#if __MACOS__ +#if NET + [UnsupportedOSPlatform ("ios")] + [UnsupportedOSPlatform ("tvos")] + [UnsupportedOSPlatform ("maccatalyst")] + [SupportedOSPlatform ("macos")] +#endif // NET + public NSUrl? BaseUrl { + get { + return GetNativeValue (NSAttributedStringDocumentReadingOptionKey.NSBaseURLDocumentOption); + } + set { + SetNativeValue (NSAttributedStringDocumentReadingOptionKey.NSBaseURLDocumentOption, value); + } + } +#endif // !__MACOS__ + +#if __MACOS__ +#if NET + [UnsupportedOSPlatform ("ios")] + [UnsupportedOSPlatform ("tvos")] + [UnsupportedOSPlatform ("maccatalyst")] + [SupportedOSPlatform ("macos")] +#endif // NET + public string? TextEncodingName { + get { + return GetStringValue (NSAttributedStringDocumentReadingOptionKey.NSTextEncodingNameDocumentOption); + } + set { + SetStringValue (NSAttributedStringDocumentReadingOptionKey.NSTextEncodingNameDocumentOption, value); + } + } +#endif // !__MACOS__ + +#if __MACOS__ +#if NET + [UnsupportedOSPlatform ("ios")] + [UnsupportedOSPlatform ("tvos")] + [UnsupportedOSPlatform ("maccatalyst")] + [SupportedOSPlatform ("macos")] +#endif // NET + public float? TextSizeMultiplier { + get { + return GetFloatValue (NSAttributedStringDocumentReadingOptionKey.NSTextSizeMultiplierDocumentOption); + } + set { + SetNumberValue (NSAttributedStringDocumentReadingOptionKey.NSTextSizeMultiplierDocumentOption, value); + } + } +#endif // !__MACOS__ + +#if __MACOS__ +#if NET + [UnsupportedOSPlatform ("ios")] + [UnsupportedOSPlatform ("tvos")] + [UnsupportedOSPlatform ("maccatalyst")] + [SupportedOSPlatform ("macos")] +#endif // NET + public float? Timeout { + get { + return GetFloatValue (NSAttributedStringDocumentReadingOptionKey.NSTimeoutDocumentOption); + } + set { + SetNumberValue (NSAttributedStringDocumentReadingOptionKey.NSTimeoutDocumentOption, value); + } + } +#endif // !__MACOS__ + +#endif // !COREBUILD + } +} diff --git a/src/appkit.cs b/src/appkit.cs index 92658cb1e6..f4f449a877 100644 --- a/src/appkit.cs +++ b/src/appkit.cs @@ -15524,33 +15524,6 @@ namespace AppKit { NSString TextEffect { get; } // Internal - [Internal, Field ("NSDocumentTypeDocumentOption")] - NSString NSDocumentTypeDocumentOption { get; } - - [Internal, Field ("NSDefaultAttributesDocumentOption")] - NSString NSDefaultAttributesDocumentOption { get; } - - [Internal, Field ("NSCharacterEncodingDocumentOption")] - NSString NSCharacterEncodingDocumentOption { get; } - - [Internal, Field ("NSTextEncodingNameDocumentOption")] - NSString NSTextEncodingNameDocumentOption { get; } - - [Internal, Field ("NSBaseURLDocumentOption")] - NSString NSBaseURLDocumentOption { get; } - - [Internal, Field ("NSTimeoutDocumentOption")] - NSString NSTimeoutDocumentOption { get; } - - [Internal, Field ("NSWebPreferencesDocumentOption")] - NSString NSWebPreferencesDocumentOption { get; } - - [Internal, Field ("NSWebResourceLoadDelegateDocumentOption")] - NSString NSWebResourceLoadDelegateDocumentOption { get; } - - [Internal, Field ("NSTextSizeMultiplierDocumentOption")] - NSString NSTextSizeMultiplierDocumentOption { get; } - [Internal, Field ("NSFileTypeDocumentOption")] NSString NSFileTypeDocumentOption { get; } diff --git a/src/foundation.cs b/src/foundation.cs index ae4a34381c..55e58ea77c 100644 --- a/src/foundation.cs +++ b/src/foundation.cs @@ -284,10 +284,6 @@ namespace Foundation { #endif } -#if MONOMAC - interface NSAttributedStringDocumentAttributes { } -#endif - [BaseType (typeof (NSObject))] partial interface NSAttributedString : NSCoding, NSMutableCopying, NSSecureCoding #if MONOMAC diff --git a/src/frameworks.sources b/src/frameworks.sources index c5d9839e26..48e4d6b0fc 100644 --- a/src/frameworks.sources +++ b/src/frameworks.sources @@ -786,7 +786,7 @@ FOUNDATION_CORE_SOURCES = \ Foundation/ProtocolAttribute.cs \ Foundation/RegisterAttribute.cs \ Foundation/NSObject.iOS.cs \ - Foundation/NSAttributedString.iOS.cs \ + Foundation/NSAttributedStringDocumentAttributes.cs \ Foundation/NSObject.mac.cs \ Foundation/NSDateComponents.cs \ Foundation/XpcInterfaceAttribute.cs \ diff --git a/src/xkit.cs b/src/xkit.cs index 93b5522d38..a2327fc6e0 100644 --- a/src/xkit.cs +++ b/src/xkit.cs @@ -4381,4 +4381,33 @@ namespace UIKit { [iOS (13, 0), TV (13, 0), Watch (6, 0)] NSString CocoaVersionDocumentAttribute { get; } } + + [Static] + [Internal] + interface NSAttributedStringDocumentReadingOptionKey { + + [NoiOS, NoTV, NoWatch, NoMacCatalyst] + [Internal, Field ("NSWebPreferencesDocumentOption")] + NSString NSWebPreferencesDocumentOption { get; } + + [NoiOS, NoTV, NoWatch, NoMacCatalyst] + [Internal, Field ("NSWebResourceLoadDelegateDocumentOption")] + NSString NSWebResourceLoadDelegateDocumentOption { get; } + + [NoiOS, NoTV, NoWatch, NoMacCatalyst] + [Internal, Field ("NSBaseURLDocumentOption")] + NSString NSBaseURLDocumentOption { get; } + + [NoiOS, NoTV, NoWatch, NoMacCatalyst] + [Internal, Field ("NSTextEncodingNameDocumentOption")] + NSString NSTextEncodingNameDocumentOption { get; } + + [NoiOS, NoTV, NoWatch, NoMacCatalyst] + [Internal, Field ("NSTextSizeMultiplierDocumentOption")] + NSString NSTextSizeMultiplierDocumentOption { get; } + + [NoiOS, NoTV, NoWatch, NoMacCatalyst] + [Internal, Field ("NSTimeoutDocumentOption")] + NSString NSTimeoutDocumentOption { get; } + } } diff --git a/tests/xtro-sharpie/api-annotations-dotnet/common-AppKit.ignore b/tests/xtro-sharpie/api-annotations-dotnet/common-AppKit.ignore index 6f9811c327..ab70a8c618 100644 --- a/tests/xtro-sharpie/api-annotations-dotnet/common-AppKit.ignore +++ b/tests/xtro-sharpie/api-annotations-dotnet/common-AppKit.ignore @@ -5,6 +5,9 @@ ## unsorted !unknown-field! item bound +!missing-field! NSCharacterEncodingDocumentOption not bound +!missing-field! NSDefaultAttributesDocumentOption not bound +!missing-field! NSDocumentTypeDocumentOption not bound !missing-field! NSImageNameColumnViewTemplate not bound !missing-field! NSImageNameGoBackTemplate not bound !missing-field! NSImageNameGoForwardTemplate not bound diff --git a/tests/xtro-sharpie/common-AppKit.ignore b/tests/xtro-sharpie/common-AppKit.ignore index 0a191de59f..963eedb6c0 100644 --- a/tests/xtro-sharpie/common-AppKit.ignore +++ b/tests/xtro-sharpie/common-AppKit.ignore @@ -88,6 +88,7 @@ !missing-field! NSBadRTFStyleSheetException not bound !missing-field! NSBlack not bound !missing-field! NSBrowserIllegalDelegateException not bound +!missing-field! NSCharacterEncodingDocumentOption not bound !missing-field! NSColorListDidChangeNotification not bound !missing-field! NSColorListIOException not bound !missing-field! NSColorListNotEditableException not bound @@ -110,6 +111,7 @@ !missing-field! NSCriticalValueBinding not bound !missing-field! NSDarkGray not bound !missing-field! NSDataBinding not bound +!missing-field! NSDefaultAttributesDocumentOption not bound !missing-field! NSDefinitionPresentationTypeDictionaryApplication not bound !missing-field! NSDefinitionPresentationTypeKey not bound !missing-field! NSDefinitionPresentationTypeOverlay not bound @@ -125,6 +127,7 @@ !missing-field! NSDisplayPatternTitleBinding not bound !missing-field! NSDisplayPatternValueBinding not bound !missing-field! NSDocumentEditedBinding not bound +!missing-field! NSDocumentTypeDocumentOption not bound !missing-field! NSDoubleClickArgumentBinding not bound !missing-field! NSDoubleClickTargetBinding not bound !missing-field! NSDraggingException not bound