Example #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref= "T:WorldWind.PluginEngine.PluginListItem"/> class.
 /// </summary>
 public PluginListItem(PluginInfo pi)
 {
     this.pluginInfo = pi;
     this.Text       = pi.Name;
     this.Checked    = pi.IsLoadedAtStartup;
 }
Example #2
0
		/// <summary>
		/// Uninstall/delete a plugin.
		/// </summary>
		/// <param name="pi"></param>
		public void Uninstall(PluginInfo pi)
		{
			// Unload the plugin
			Unload(pi);

			File.Delete( pi.FullPath );

			m_plugins.Remove( pi );
		}
Example #3
0
		/// <summary>
		/// Compiles a file to an assembly using specified compiler.
		/// </summary>
		Assembly Compile( PluginInfo pi, CodeDomProvider cdp )
		{
			// Compile
			//ICodeCompiler compiler = cdp.CreateCompiler();

			if(cdp is Microsoft.JScript.JScriptCodeProvider)
				// JSCript doesn't support unsafe code
				cp.CompilerOptions = "";
			else
				cp.CompilerOptions = "/unsafe";

			// Add references
			cp.ReferencedAssemblies.Clear();
			foreach( string reference in m_worldWindReferencesList)
				cp.ReferencedAssemblies.Add(reference);

			// Add reference to core functions for VB.Net users 
			if(cdp is Microsoft.VisualBasic.VBCodeProvider)
				cp.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");

			// Add references specified in the plugin
			foreach( string reference in pi.References.Split(','))
				AddCompilerReference( pi.FullPath, reference.Trim() );

			CompilerResults cr = cdp.CompileAssemblyFromFile( cp, pi.FullPath );
			if(cr.Errors.HasErrors || cr.Errors.HasWarnings)
			{
				// Handle compiler errors
				StringBuilder error = new StringBuilder();
				foreach (CompilerError err in cr.Errors)
				{
					string type = (err.IsWarning ? "Warning" : "Error");
					if(error.Length>0)
						error.Append(Environment.NewLine);
					error.AppendFormat("{0} {1}: Line {2} Column {3}: {4}", type, err.ErrorNumber, err.Line, err.Column, err.ErrorText );
				}
                Log.Write(Log.Levels.Error, LogCategory, error.ToString());
                if(cr.Errors.HasErrors)
				    throw new Exception( error.ToString() );
			}

			// Success, return our new assembly
			return cr.CompiledAssembly;
		}
Example #4
0
		/// <summary>
		/// Unload a plugin if it's loaded.
		/// </summary>
		public void Unload(PluginInfo pi)
		{
			if(!pi.IsCurrentlyLoaded)
				return;
			pi.Plugin.PluginUnload();
		}
Example #5
0
		/// <summary>
		/// Load a plugin
		/// </summary>
		public void Load(PluginInfo pi)
		{
			if(pi.Plugin == null)
			{
				// Try to find a suitable compiler
				string extension = Path.GetExtension(pi.FullPath).ToLower();
				Assembly asm = null;
				if(extension==".dll")
				{
					// Load pre-compiled assembly
					asm = Assembly.LoadFile(pi.FullPath);
				}
				else
				{
					CodeDomProvider cdp = (CodeDomProvider)codeDomProviders[extension];
					if(cdp==null)
						return;
					asm = Compile(pi, cdp);
				}

				pi.Plugin = GetPluginInterface(asm);
			}

			string pluginPath = MainApplication.DirectoryPath;
			if( pi.FullPath != null && pi.FullPath.Length > 0)
				pluginPath = Path.GetDirectoryName(pi.FullPath);

			pi.Plugin.PluginLoad(worldWind, pluginPath);
		}
Example #6
0
		/// <summary>
		/// Adds plugin from one of the plugins
		/// </summary>
		void AddPlugin(string path)
		{
			foreach (string filename in Directory.GetFiles(path))
			{
				bool isAlreadyInList = false;
				foreach(PluginInfo info in m_plugins)
				{
					if(info.FullPath == filename)
					{
						isAlreadyInList = true;
						break;
					}
				}

				if(isAlreadyInList)
					continue;

				string extension = Path.GetExtension(filename).ToLower();
				if(HasCompiler(extension) || IsPreCompiled(extension))
				{
					PluginInfo plugin = new PluginInfo();
					plugin.FullPath = filename;
					m_plugins.Add(plugin);
				}
			}
		}
Example #7
0
		/// <summary>
		/// Scan for plugins inside an assembly.
		/// </summary>
		public void FindPlugins( Assembly assembly )
		{
			foreach( Type t in assembly.GetTypes() )
			{
				if(!t.IsClass)
					continue;

				if(!t.IsPublic)
					continue;

				if(t.BaseType!=typeof(Plugin))
					continue;

				try
				{
					PluginInfo pi = new PluginInfo();
					pi.Plugin = (Plugin) assembly.CreateInstance( t.ToString() );
					pi.Name = t.Name;
					pi.Description = "World Wind internally loaded plugin.";
					m_plugins.Add(pi);
				}
				catch
				{
					// Ignore exceptions during entry point search.
				}
			}
		}
Example #8
0
		/// <summary>
		/// Initializes a new instance of the <see cref= "T:WorldWind.PluginEngine.PluginListItem"/> class.
		/// </summary>
		public PluginListItem(PluginInfo pi)
		{
			this.pluginInfo = pi;
			this.Text = pi.Name;	
			this.Checked = pi.IsLoadedAtStartup;
		}