CPF/CPF.Mac/Mac/Foundation/NSCalendar.cs
2023-11-21 23:05:03 +08:00

495 lines
14 KiB
C#

using CPF.Mac.ObjCRuntime;
using System;
using System.ComponentModel;
namespace CPF.Mac.Foundation
{
[Register("NSCalendar", true)]
public class NSCalendar : NSObject
{
private static readonly IntPtr selCalendarIdentifierHandle = Selector.GetHandle("calendarIdentifier");
private static readonly IntPtr selCurrentCalendarHandle = Selector.GetHandle("currentCalendar");
private static readonly IntPtr selLocaleHandle = Selector.GetHandle("locale");
private static readonly IntPtr selSetLocale_Handle = Selector.GetHandle("setLocale:");
private static readonly IntPtr selTimeZoneHandle = Selector.GetHandle("timeZone");
private static readonly IntPtr selSetTimeZone_Handle = Selector.GetHandle("setTimeZone:");
private static readonly IntPtr selFirstWeekdayHandle = Selector.GetHandle("firstWeekday");
private static readonly IntPtr selSetFirstWeekday_Handle = Selector.GetHandle("setFirstWeekday:");
private static readonly IntPtr selMinimumDaysInFirstWeekHandle = Selector.GetHandle("minimumDaysInFirstWeek");
private static readonly IntPtr selSetMinimumDaysInFirstWeek_Handle = Selector.GetHandle("setMinimumDaysInFirstWeek:");
private static readonly IntPtr selInitWithCalendarIdentifier_Handle = Selector.GetHandle("initWithCalendarIdentifier:");
private static readonly IntPtr selComponentsFromDate_Handle = Selector.GetHandle("components:fromDate:");
private static readonly IntPtr selComponentsFromDateToDateOptions_Handle = Selector.GetHandle("components:fromDate:toDate:options:");
private static readonly IntPtr selDateByAddingComponentsToDateOptions_Handle = Selector.GetHandle("dateByAddingComponents:toDate:options:");
private static readonly IntPtr selDateFromComponents_Handle = Selector.GetHandle("dateFromComponents:");
private static readonly IntPtr class_ptr = Class.GetHandle("NSCalendar");
private static object __mt_CurrentCalendar_var_static;
private object __mt_Locale_var;
private object __mt_TimeZone_var;
private static NSString _NSGregorianCalendar;
private static NSString _NSBuddhistCalendar;
private static NSString _NSChineseCalendar;
private static NSString _NSHebrewCalendar;
private static NSString _NSIslamicCalendar;
private static NSString _NSIslamicCivilCalendar;
private static NSString _NSJapaneseCalendar;
private static NSString _NSRepublicOfChinaCalendar;
private static NSString _NSPersianCalendar;
private static NSString _NSIndianCalendar;
private static NSString _NSISO8601Calendar;
public override IntPtr ClassHandle => class_ptr;
public virtual string Identifier
{
[Export("calendarIdentifier")]
get
{
if (IsDirectBinding)
{
return NSString.FromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selCalendarIdentifierHandle));
}
return NSString.FromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selCalendarIdentifierHandle));
}
}
public static NSCalendar CurrentCalendar
{
[Export("currentCalendar")]
get
{
return (NSCalendar)(__mt_CurrentCalendar_var_static = (NSCalendar)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selCurrentCalendarHandle)));
}
}
public virtual NSLocale Locale
{
[Export("locale")]
get
{
return (NSLocale)(__mt_Locale_var = ((!IsDirectBinding) ? ((NSLocale)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selLocaleHandle))) : ((NSLocale)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selLocaleHandle)))));
}
[Export("setLocale:")]
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetLocale_Handle, value.Handle);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetLocale_Handle, value.Handle);
}
__mt_Locale_var = value;
}
}
public virtual NSTimeZone TimeZone
{
[Export("timeZone")]
get
{
return (NSTimeZone)(__mt_TimeZone_var = ((!IsDirectBinding) ? ((NSTimeZone)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selTimeZoneHandle))) : ((NSTimeZone)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selTimeZoneHandle)))));
}
[Export("setTimeZone:")]
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetTimeZone_Handle, value.Handle);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetTimeZone_Handle, value.Handle);
}
__mt_TimeZone_var = value;
}
}
public virtual ulong FirstWeekDay
{
[Export("firstWeekday")]
get
{
if (IsDirectBinding)
{
return Messaging.UInt64_objc_msgSend(base.Handle, selFirstWeekdayHandle);
}
return Messaging.UInt64_objc_msgSendSuper(base.SuperHandle, selFirstWeekdayHandle);
}
[Export("setFirstWeekday:")]
set
{
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_UInt64(base.Handle, selSetFirstWeekday_Handle, value);
}
else
{
Messaging.void_objc_msgSendSuper_UInt64(base.SuperHandle, selSetFirstWeekday_Handle, value);
}
}
}
public virtual ulong MinimumDaysInFirstWeek
{
[Export("minimumDaysInFirstWeek")]
get
{
if (IsDirectBinding)
{
return Messaging.UInt64_objc_msgSend(base.Handle, selMinimumDaysInFirstWeekHandle);
}
return Messaging.UInt64_objc_msgSendSuper(base.SuperHandle, selMinimumDaysInFirstWeekHandle);
}
[Export("setMinimumDaysInFirstWeek:")]
set
{
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_UInt64(base.Handle, selSetMinimumDaysInFirstWeek_Handle, value);
}
else
{
Messaging.void_objc_msgSendSuper_UInt64(base.SuperHandle, selSetMinimumDaysInFirstWeek_Handle, value);
}
}
}
[Field("NSGregorianCalendar", "Foundation")]
internal static NSString NSGregorianCalendar
{
get
{
if (_NSGregorianCalendar == null)
{
_NSGregorianCalendar = Dlfcn.GetStringConstant(Libraries.Foundation.Handle, "NSGregorianCalendar");
}
return _NSGregorianCalendar;
}
}
[Field("NSBuddhistCalendar", "Foundation")]
internal static NSString NSBuddhistCalendar
{
get
{
if (_NSBuddhistCalendar == null)
{
_NSBuddhistCalendar = Dlfcn.GetStringConstant(Libraries.Foundation.Handle, "NSBuddhistCalendar");
}
return _NSBuddhistCalendar;
}
}
[Field("NSChineseCalendar", "Foundation")]
internal static NSString NSChineseCalendar
{
get
{
if (_NSChineseCalendar == null)
{
_NSChineseCalendar = Dlfcn.GetStringConstant(Libraries.Foundation.Handle, "NSChineseCalendar");
}
return _NSChineseCalendar;
}
}
[Field("NSHebrewCalendar", "Foundation")]
internal static NSString NSHebrewCalendar
{
get
{
if (_NSHebrewCalendar == null)
{
_NSHebrewCalendar = Dlfcn.GetStringConstant(Libraries.Foundation.Handle, "NSHebrewCalendar");
}
return _NSHebrewCalendar;
}
}
[Field("NSIslamicCalendar", "Foundation")]
internal static NSString NSIslamicCalendar
{
get
{
if (_NSIslamicCalendar == null)
{
_NSIslamicCalendar = Dlfcn.GetStringConstant(Libraries.Foundation.Handle, "NSIslamicCalendar");
}
return _NSIslamicCalendar;
}
}
[Field("NSIslamicCivilCalendar", "Foundation")]
internal static NSString NSIslamicCivilCalendar
{
get
{
if (_NSIslamicCivilCalendar == null)
{
_NSIslamicCivilCalendar = Dlfcn.GetStringConstant(Libraries.Foundation.Handle, "NSIslamicCivilCalendar");
}
return _NSIslamicCivilCalendar;
}
}
[Field("NSJapaneseCalendar", "Foundation")]
internal static NSString NSJapaneseCalendar
{
get
{
if (_NSJapaneseCalendar == null)
{
_NSJapaneseCalendar = Dlfcn.GetStringConstant(Libraries.Foundation.Handle, "NSJapaneseCalendar");
}
return _NSJapaneseCalendar;
}
}
[Field("NSRepublicOfChinaCalendar", "Foundation")]
internal static NSString NSRepublicOfChinaCalendar
{
get
{
if (_NSRepublicOfChinaCalendar == null)
{
_NSRepublicOfChinaCalendar = Dlfcn.GetStringConstant(Libraries.Foundation.Handle, "NSRepublicOfChinaCalendar");
}
return _NSRepublicOfChinaCalendar;
}
}
[Field("NSPersianCalendar", "Foundation")]
internal static NSString NSPersianCalendar
{
get
{
if (_NSPersianCalendar == null)
{
_NSPersianCalendar = Dlfcn.GetStringConstant(Libraries.Foundation.Handle, "NSPersianCalendar");
}
return _NSPersianCalendar;
}
}
[Field("NSIndianCalendar", "Foundation")]
internal static NSString NSIndianCalendar
{
get
{
if (_NSIndianCalendar == null)
{
_NSIndianCalendar = Dlfcn.GetStringConstant(Libraries.Foundation.Handle, "NSIndianCalendar");
}
return _NSIndianCalendar;
}
}
[Field("NSISO8601Calendar", "Foundation")]
internal static NSString NSISO8601Calendar
{
get
{
if (_NSISO8601Calendar == null)
{
_NSISO8601Calendar = Dlfcn.GetStringConstant(Libraries.Foundation.Handle, "NSISO8601Calendar");
}
return _NSISO8601Calendar;
}
}
private static NSString GetCalendarIdentifier(NSCalendarType type)
{
switch (type)
{
case NSCalendarType.Gregorian:
return NSGregorianCalendar;
case NSCalendarType.Buddhist:
return NSBuddhistCalendar;
case NSCalendarType.Chinese:
return NSChineseCalendar;
case NSCalendarType.Hebrew:
return NSHebrewCalendar;
case NSCalendarType.Islamic:
return NSIslamicCalendar;
case NSCalendarType.IslamicCivil:
return NSIslamicCivilCalendar;
case NSCalendarType.Japanese:
return NSJapaneseCalendar;
case NSCalendarType.RepublicOfChina:
return NSRepublicOfChinaCalendar;
case NSCalendarType.Persian:
return NSPersianCalendar;
case NSCalendarType.Indian:
return NSIndianCalendar;
case NSCalendarType.ISO8601:
return NSISO8601Calendar;
default:
throw new ArgumentException("Unknown NSCalendarType value");
}
}
public NSCalendar(NSCalendarType calendarType)
: this(GetCalendarIdentifier(calendarType))
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("initWithCoder:")]
public NSCalendar(NSCoder coder)
: base(NSObjectFlag.Empty)
{
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, Selector.InitWithCoder, coder.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, Selector.InitWithCoder, coder.Handle);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSCalendar(NSObjectFlag t)
: base(t)
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSCalendar(IntPtr handle)
: base(handle)
{
}
[Export("initWithCalendarIdentifier:")]
public NSCalendar(NSString identifier)
: base(NSObjectFlag.Empty)
{
if (identifier == null)
{
throw new ArgumentNullException("identifier");
}
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selInitWithCalendarIdentifier_Handle, identifier.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selInitWithCalendarIdentifier_Handle, identifier.Handle);
}
}
[Export("components:fromDate:")]
public virtual NSDateComponents Components(NSCalendarUnit unitFlags, NSDate fromDate)
{
if (fromDate == null)
{
throw new ArgumentNullException("fromDate");
}
if (IsDirectBinding)
{
return (NSDateComponents)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_UInt64_IntPtr(base.Handle, selComponentsFromDate_Handle, (ulong)unitFlags, fromDate.Handle));
}
return (NSDateComponents)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_UInt64_IntPtr(base.SuperHandle, selComponentsFromDate_Handle, (ulong)unitFlags, fromDate.Handle));
}
[Export("components:fromDate:toDate:options:")]
public virtual NSDateComponents Components(NSCalendarUnit unitFlags, NSDate fromDate, NSDate toDate, NSDateComponentsWrappingBehavior opts)
{
if (fromDate == null)
{
throw new ArgumentNullException("fromDate");
}
if (toDate == null)
{
throw new ArgumentNullException("toDate");
}
if (IsDirectBinding)
{
return (NSDateComponents)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_UInt64_IntPtr_IntPtr_UInt64(base.Handle, selComponentsFromDateToDateOptions_Handle, (ulong)unitFlags, fromDate.Handle, toDate.Handle, (ulong)opts));
}
return (NSDateComponents)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_UInt64_IntPtr_IntPtr_UInt64(base.SuperHandle, selComponentsFromDateToDateOptions_Handle, (ulong)unitFlags, fromDate.Handle, toDate.Handle, (ulong)opts));
}
[Export("dateByAddingComponents:toDate:options:")]
public virtual NSDate DateByAddingComponents(NSDateComponents comps, NSDate date, NSDateComponentsWrappingBehavior opts)
{
if (comps == null)
{
throw new ArgumentNullException("comps");
}
if (date == null)
{
throw new ArgumentNullException("date");
}
if (IsDirectBinding)
{
return (NSDate)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr_UInt64(base.Handle, selDateByAddingComponentsToDateOptions_Handle, comps.Handle, date.Handle, (ulong)opts));
}
return (NSDate)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr_UInt64(base.SuperHandle, selDateByAddingComponentsToDateOptions_Handle, comps.Handle, date.Handle, (ulong)opts));
}
[Export("dateFromComponents:")]
public virtual NSDate DateFromComponents(NSDateComponents comps)
{
if (comps == null)
{
throw new ArgumentNullException("comps");
}
if (IsDirectBinding)
{
return (NSDate)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selDateFromComponents_Handle, comps.Handle));
}
return (NSDate)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selDateFromComponents_Handle, comps.Handle));
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (base.Handle == IntPtr.Zero)
{
__mt_Locale_var = null;
__mt_TimeZone_var = null;
}
}
}
}