Esempio n. 1
0
        public static bool LoadNibResourceNamedOwner(this NSBundle bundle, Type type, NSString resourceName, Id owner)
        {
            bool result = false;
            Assembly assembly = type.Assembly;

            using (Stream stream = assembly.GetManifestResourceStream(resourceName))
            {
                if (stream != null)
                {
                    byte[] buffer = new byte[stream.Length];
                    stream.Read(buffer, 0, (int)stream.Length);
                    stream.Close();

                    String fileName = Path.GetTempFileName();
                    File.WriteAllBytes(fileName, buffer);

					NSNib nib = new NSNib(NSURL.URLWithString(fileName));
					NSArray topLevelObjects;
					result = nib.InstantiateNibWithOwnerTopLevelObjects(owner, out topLevelObjects);
					nib.Release();

                    File.Delete(fileName);
                }
            }

            return result;
        }
Esempio n. 2
0
        /// <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
        }
Esempio n. 3
0
		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;
		}