Exemplo n.º 1
0
 public void CFBooleanRefs()
 {
     Assert.True(CFBoolean.True != IntPtr.Zero);
     Assert.True(CFBoolean.False != IntPtr.Zero);
     Assert.True(CFBoolean.ToBoolean(CFBoolean.True));
     Assert.False(CFBoolean.ToBoolean(CFBoolean.False));
     Assert.Equal(CFBoolean.True, CFBoolean.ToCFBoolean(true));
     Assert.Equal(CFBoolean.False, CFBoolean.ToCFBoolean(false));
 }
Exemplo n.º 2
0
        protected bool?GetBoolValue(NSString key)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }

            var value = CFDictionary.GetValue(Dictionary.Handle, key.Handle);

            if (value == IntPtr.Zero)
            {
                return(null);
            }

            return(CFBoolean.GetValue(value));
        }
Exemplo n.º 3
0
        protected override bool StorageTryGetValue(
            string key,
            Type valueType,
            TypeCode valueTypeCode,
            out object value)
        {
            using (var cfKey = new CFString(key)) {
                var valuePtr = CFPreferences.CopyValue(
                    cfKey.Handle,
                    applicationId.Handle,
                    CFPreferences.kCFPreferencesCurrentUser,
                    CFPreferences.kCFPreferencesAnyHost);

                if (valuePtr == IntPtr.Zero)
                {
                    value = null;
                    return(false);
                }

                var typeId = CoreFoundation.CFGetTypeID(valuePtr);

                if (typeId == CoreFoundation.CFTypeID.CFBoolean)
                {
                    value = CFBoolean.ToBoolean(valuePtr);
                    return(true);
                }

                if (typeId == CoreFoundation.CFTypeID.CFString)
                {
                    using (var cfString = new CFString(valuePtr))
                        value = cfString.ToString();
                    return(true);
                }

                if (typeId == CoreFoundation.CFTypeID.CFNumber)
                {
                    using (var cfNumber = new CFNumber(valuePtr)) {
                        switch (cfNumber.Type)
                        {
                        case CFNumberType.SInt8:
                        case CFNumberType.Char:
                            value = valueTypeCode == TypeCode.Byte
                                ? cfNumber.ToByte()
                                : (object)cfNumber.ToSByte();
                            return(true);

                        case CFNumberType.SInt16:
                        case CFNumberType.Short:
                            value = valueTypeCode == TypeCode.UInt16
                                ? cfNumber.ToUInt16()
                                : (object)cfNumber.ToInt16();
                            return(true);

                        case CFNumberType.SInt32:
                        case CFNumberType.Int:
                        case CFNumberType.Long:
                            value = valueTypeCode == TypeCode.UInt32
                                ? cfNumber.ToUInt32()
                                : (object)cfNumber.ToInt32();
                            return(true);

                        case CFNumberType.SInt64:
                        case CFNumberType.LongLong:
                        case CFNumberType.CFIndex:
                        case CFNumberType.NSInteger:
                            value = valueTypeCode == TypeCode.UInt64
                                ? cfNumber.ToUInt64()
                                : (object)cfNumber.ToInt64();
                            return(true);

                        case CFNumberType.Float32:
                        case CFNumberType.Float:
                            value = cfNumber.ToSingle();
                            return(true);

                        case CFNumberType.Float64:
                        case CFNumberType.Double:
                        case CFNumberType.CGFloat:
                            value = cfNumber.ToDouble();
                            return(true);
                        }
                    }
                }

                if (typeId == CoreFoundation.CFTypeID.CFArray)
                {
                    try {
                        value = CFArray
                                .FromCFStringArray(valuePtr)
                                ?.ToArray();
                        return(value != null);
                    } catch {
                        value = null;
                        return(false);
                    }
                }

                value = null;
                return(false);
            }
        }
Exemplo n.º 4
0
        protected override bool StorageSetValue(string key, object value)
        {
            CFObject cfValue = null;

            try {
                switch (value)
                {
                case bool v:
                    SetValue(key, CFBoolean.ToCFBoolean(v));
                    return(true);

                case string v:
                    cfValue = new CFString(v);
                    break;

                case IEnumerable <string> v:
                    var cfArray = new CFMutableArray();
                    cfArray.AddRange(v);
                    cfValue = cfArray;
                    break;

                case sbyte v:
                    cfValue = new CFNumber(v);
                    break;

                case byte v:
                    cfValue = new CFNumber(v);
                    break;

                case short v:
                    cfValue = new CFNumber(v);
                    break;

                case ushort v:
                    cfValue = new CFNumber(v);
                    break;

                case int v:
                    cfValue = new CFNumber(v);
                    break;

                case uint v:
                    cfValue = new CFNumber(v);
                    break;

                case long v:
                    cfValue = new CFNumber(v);
                    break;

                case ulong v:
                    cfValue = new CFNumber(v);
                    break;

                case float v:
                    cfValue = new CFNumber(v);
                    break;

                case double v:
                    cfValue = new CFNumber(v);
                    break;

                default:
                    return(false);
                }

                SetValue(key, cfValue.Handle);
                return(true);
            } finally {
                cfValue?.Dispose();
            }
        }
Exemplo n.º 5
0
        internal override NSMutableDictionary ToDictionary()
        {
            var ret = base.ToDictionary();

            if (Title != null)
            {
                ret.LowlevelSetObject((NSString)Title, kCGPDFContextTitle);
            }
            if (Author != null)
            {
                ret.LowlevelSetObject((NSString)Author, kCGPDFContextAuthor);
            }
            if (Subject != null)
            {
                ret.LowlevelSetObject((NSString)Subject, kCGPDFContextSubject);
            }
            if (Keywords != null && Keywords.Length > 0)
            {
                if (Keywords.Length == 1)
                {
                    ret.LowlevelSetObject((NSString)Keywords [0], kCGPDFContextKeywords);
                }
                else
                {
                    ret.LowlevelSetObject(NSArray.FromStrings(Keywords), kCGPDFContextKeywords);
                }
            }
            if (Creator != null)
            {
                ret.LowlevelSetObject((NSString)Creator, kCGPDFContextCreator);
            }
            if (OwnerPassword != null)
            {
                ret.LowlevelSetObject((NSString)OwnerPassword, kCGPDFContextOwnerPassword);
            }
            if (UserPassword != null)
            {
                ret.LowlevelSetObject((NSString)UserPassword, kCGPDFContextUserPassword);
            }
            if (EncryptionKeyLength.HasValue)
            {
                ret.LowlevelSetObject(NSNumber.FromInt32(EncryptionKeyLength.Value), kCGPDFContextEncryptionKeyLength);
            }
            if (AllowsPrinting.HasValue && AllowsPrinting.Value == false)
            {
                ret.LowlevelSetObject(CFBoolean.FalseHandle, kCGPDFContextAllowsPrinting);
            }
            if (AllowsCopying.HasValue && AllowsCopying.Value == false)
            {
                ret.LowlevelSetObject(CFBoolean.FalseHandle, kCGPDFContextAllowsCopying);
            }
            if (AccessPermissions.HasValue)
            {
                ret.LowlevelSetObject(NSNumber.FromInt32((int)AccessPermissions.Value), kCGPDFContextAccessPermissions);
            }
            // only set the keys if they exists in the current OS version
            if ((kCGPDFContextCreateLinearizedPDF != IntPtr.Zero) && CreateLinearizedPdf.HasValue)
            {
                ret.LowlevelSetObject(CFBoolean.ToHandle(CreateLinearizedPdf.Value), kCGPDFContextCreateLinearizedPDF);
            }
            // default to kCFBooleanFalse
            if ((kCGPDFContextCreatePDFA != IntPtr.Zero) && CreatePdfA2u.HasValue && CreatePdfA2u == true)
            {
                ret.LowlevelSetObject(CFBoolean.TrueHandle, kCGPDFContextCreatePDFA);
            }
            return(ret);
        }