/// <summary> /// Loads the nib and assings ownership to the <see cref="SharedApplication"/> instance. /// </summary> /// <param name="filename">The filename.</param> public static void LoadNib(String filename) { if (Logger.InfoEnabled) { Logger.Info("NSApplication", "Loading NIB " + filename); } #if MACOSX_10_8 NSArray topLevelObjets; NSNib nib = new NSNib (filename, NSBundle.MainBundle); if (!nib.InstantiateWithOwnerTopLevelObjects (NSApplication.SharedApplication, out topLevelObjets)) { Logger.Error("NSApplication", "Error while loading the NIB file"); } #else if (!NSBundle_AppKitAdditions.LoadNibNamedOwner(filename, SharedApplication)) { Logger.Error("NSApplication", "Error while loading the NIB file"); } #endif }
public static bool InstantiateNibWithOwnerTopLevelObjects (Type type, NSString resourceName, Id owner) { if (resourceName == null) { throw new ArgumentNullException("resourceName"); } Assembly assembly = type.Assembly; Logger.Info("NSNib", "Searching for '" + resourceName + "' resource in " + assembly.FullName); // Lookup the resource name IEnumerable<String> resources = assembly.GetManifestResourceNames ().Where(r => r.StartsWith(resourceName)); if (resources.Count() == 0) { return false; } foreach(String r in resources) { Logger.Info("NSNib", "Found '" + r + "'"); } IList<String> candidates = new List<String> (); // Check the invariant culture String key = resourceName; Logger.Info("NSNib", "Probing '" + key + "'..."); String candidate = resources.FirstOrDefault (r => String.Equals (r, key)); if (candidate != null) { candidates.Add (candidate); } // Check preferred cultures NSArray languages = NSLocale.PreferredLanguages; foreach(NSString language in languages.GetEnumerator<NSString>()) { key = resourceName + "." + language; Logger.Info("NSNib", "Probing '" + key + "'..."); candidate = resources.FirstOrDefault (r => String.Equals (r, key)); if (candidate != null) { candidates.Add (candidate); } } if (candidates.Count == 0) { return false; } bool result = false; String name = candidates.First(); String fileName = Path.Combine (Path.GetTempPath (), Path.GetTempFileName ()); using (Stream fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { using (Stream resourceStream = assembly.GetManifestResourceStream(name)) { resourceStream.CopyTo (fileStream); } } NSNib nib = new NSNib (NSURL.FileURLWithPath (fileName)); NSArray topLevelObjects; #if MACOSX_10_8 result = nib.InstantiateWithOwnerTopLevelObjects(owner, out topLevelObjects); #else result = nib.InstantiateNibWithOwnerTopLevelObjects (owner, out topLevelObjects); #endif nib.Release (); File.Delete (fileName); return result; }