public static void AddRequiredDeviceCapability(IIgorModule ModuleInst, string PlistPath, string NewRequiredDeviceCapability) { if (IgorAssert.EnsureTrue(ModuleInst, File.Exists(PlistPath), "Plist " + PlistPath + " doesn't exist!")) { FileInfo PlistFileInfo = new FileInfo(PlistPath); NSObject PlistRoot = PropertyListParser.Parse(PlistFileInfo); if (IgorAssert.EnsureTrue(ModuleInst, PlistRoot != null, "Plist " + PlistPath + " could not be parsed!")) { if (IgorAssert.EnsureTrue(ModuleInst, typeof(NSDictionary).IsAssignableFrom(PlistRoot.GetType()), "Plist " + PlistPath + " root object is not a dictionary.")) { NSDictionary RootDictionary = (NSDictionary)PlistRoot; if (IgorAssert.EnsureTrue(ModuleInst, RootDictionary != null, "Plist root is not a dictionary.")) { if (IgorAssert.EnsureTrue(ModuleInst, RootDictionary.ContainsKey("UIRequiredDeviceCapabilities"), "Can't find UIRequiredDeviceCapabilities in plist.")) { NSObject DeviceCapabilities = RootDictionary.Get("UIRequiredDeviceCapabilities"); if (IgorAssert.EnsureTrue(ModuleInst, DeviceCapabilities != null, "Plist does not contain UIRequiredDeviceCapabilities.")) { if (IgorAssert.EnsureTrue(ModuleInst, typeof(NSArray).IsAssignableFrom(DeviceCapabilities.GetType()), "Plist UIRequiredDeviceCapabilities is not an array.")) { NSArray CapabilitiesArray = (NSArray)DeviceCapabilities; if (IgorAssert.EnsureTrue(ModuleInst, CapabilitiesArray != null, "UIRequiredDeviceCapabilities is not an array.")) { if (CapabilitiesArray.ContainsObject(new NSString(NewRequiredDeviceCapability))) { IgorDebug.Log(ModuleInst, "UIRequiredDeviceCapabilities already contains " + NewRequiredDeviceCapability); } else { NSSet NewCapabilitiesSet = new NSSet(CapabilitiesArray.GetArray()); NewCapabilitiesSet.AddObject(new NSString(NewRequiredDeviceCapability)); NSArray NewCapabilitiesArray = new NSArray(NewCapabilitiesSet.AllObjects()); RootDictionary["UIRequiredDeviceCapabilities"] = NewCapabilitiesArray; IgorRuntimeUtils.DeleteFile(PlistPath); PropertyListParser.SaveAsXml(RootDictionary, PlistFileInfo); IgorDebug.Log(ModuleInst, NewRequiredDeviceCapability + " added to UIRequiredDeviceCapabilities."); } } } } } } } } } }
public virtual void SetSubviews(NSArray newSubviews) { NSEnumerator en; NSView aView; NSMutableArray uniqNew = NSMutableArray.Array(); if (null == newSubviews) { NSException.Raise(@"NSInvalidArgumentException" ,@"Setting nil as new subviews."); } // Use a copy as we remove from the subviews array en = NSArray.ArrayWithArray(_sub_views).ObjectEnumerator(); while ((aView = (NSView)en.NextObject()) != null) { if (false == newSubviews.ContainsObject(aView)) { aView.RemoveFromSuperview(); } } en = newSubviews.ObjectEnumerator(); while ((aView = (NSView)en.NextObject()) != null) { id supersub = aView.Superview; if (supersub != null && supersub != this) { NSException.Raise(@"NSInvalidArgumentException" ,@"Superviews of new subviews must be either nil or receiver."); } if (uniqNew.ContainsObject(aView)) { NSException.Raise(@"NSInvalidArgumentException" ,@"Duplicated new subviews."); } if (false == _sub_views.ContainsObject(aView)) { this.AddSubview(aView); } uniqNew.AddObject(aView); } _sub_views = uniqNew; // The order of the subviews may have changed this.SetNeedsDisplay(true); }