Exemplo n.º 1
0
		private void ButtonAddExtension_Click(object sender, EventArgs e)
		{
			FormExtensionSelect dialog = new FormExtensionSelect();
			try
			{
				for (int i = 0; i < consumerExtensionDetails.Length; i++)
					dialog.ComboBoxExtension.Items.Add(consumerExtensionDetails[i].ExtensionAttribute.ExtensionName);
				if (consumerExtensionDetails.Length > 0)
					dialog.ComboBoxExtension.SelectedIndex = 0;
				if (dialog.ShowDialog() == DialogResult.OK) 
				{
					// Ensure that single-instance extensions are not added more than once.
					int selected = dialog.ComboBoxExtension.SelectedIndex;
					if (! consumerExtensionDetails[selected].ExtensionAttribute.AllowMultipleInstances) 
					{
						int i = 0;
						while ((i < activeExtensions.Length) && (activeExtensions[i].ExtensionDetails != consumerExtensionDetails[selected]))
							i++;
						if (i < activeExtensions.Length)
						{
							MessageBox.Show("Multiple instances of this extension are not allowed.",
								"Error", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
							return;
						}
					}

					// Determine the next available extension ID.
					int extensionID = 0;
					for (int i = 0; i < activeExtensions.Length; i++)
						if (activeExtensions[i].ExtensionID > extensionID)
							extensionID = activeExtensions[i].ExtensionID;
					extensionID++;

					// Activate the extension.
					ActiveExtensionInfo extensionInfo = ActivateExtension(consumerExtensionDetails[selected],
						extensionID, "Extension " + extensionID);

					// Add it to the active extension array.
					ActiveExtensionInfo[] newInfo = new ActiveExtensionInfo[activeExtensions.Length + 1];
					activeExtensions.CopyTo(newInfo, 0);
					newInfo[activeExtensions.Length] = extensionInfo;
					activeExtensions = newInfo;

					// Update the saved configuration.
					UpdateActiveExtensionConfig();

					// Update the user interface.
					UpdateSortedActiveExtensions();
					RebuildPageMenu();
					RepopulateExtensionsDialog();
				}
			}
			finally
			{
				dialog.Dispose();
			}
		}
Exemplo n.º 2
0
		private void ButtonRemoveExtension_Click(object sender, EventArgs e)
		{
			int i = extensionsDialog.ListBoxExtensions.SelectedIndex;
			if (i >= 0)
			{
				// Dispose of the extension.
				DeactivateExtension(activeExtensions[i]);

				// Remove it from the active extension array.
				ActiveExtensionInfo[] newInfo = new ActiveExtensionInfo[activeExtensions.Length - 1];
				for (int j = 0; j < i; j++) 
					newInfo[j] = activeExtensions[j];
				for (int j = i + 1; j < activeExtensions.Length; j++)
					newInfo[j - 1] = activeExtensions[j];
				activeExtensions = newInfo;

				// Update the saved configuration.
				UpdateActiveExtensionConfig();

				// Update the user interface.
				UpdateSortedActiveExtensions();
				RebuildPageMenu();
				RepopulateExtensionsDialog();
			}
		}
Exemplo n.º 3
0
		private void ComboBoxProvider_SelectedIndexChanged(object sender, EventArgs e)
		{
			if (! repopulatingExtensionsDialog)
			{
				// Unload the current provider and load the new one.
				if (gpsProvider != null)
					DeactivateExtension(gpsProvider);

				int selected = extensionsDialog.ComboBoxProvider.SelectedIndex;
				gpsProvider = ActivateExtension(providerExtensionDetails[selected], -1,
					providerExtensionDetails[selected].ExtensionDLL);

				// Update the saved configuration.
				configSource.Configs["Settings"].Set("GPS Provider Dll", providerExtensionDetails[selected].ExtensionDLL);
				configSource.Save();

				// Update the user interface.
				RebuildPageMenu();
				RepopulateExtensionsDialog();
			}
		}
Exemplo n.º 4
0
		private void ActivateExtensions()
		{
			// First unload all currently loaded extensions, if any.
			DeactivateExtensions();

			// Create a GPS provider object, if one was specified.
			string gpsProviderDll = configSource.Configs["Settings"].GetString("GPS Provider Dll", "");
			if (gpsProviderDll != "") 
			{
				// Find the corresponding extension details.
				int i = 0;
				while ((i < providerExtensionDetails.Length) && (providerExtensionDetails[i].ExtensionDLL != gpsProviderDll))
					i++;
				if (i >= providerExtensionDetails.Length)
					throw new Exception("Invalid GPS provider DLL setting: " + gpsProviderDll);

				// Create the extension.
				gpsProvider = ActivateExtension(providerExtensionDetails[i], -1, gpsProviderDll);
			}

			// Read in the active extension list.
			int numActiveExtensions = configSource.Configs["Settings"].GetInt("Num Active Extensions", 0);
			activeExtensions = new ActiveExtensionInfo[numActiveExtensions];
			for (int i = 0; i < numActiveExtensions; i++) 
			{
				string section = "Active Extension " + i;
				Nini.Config.IConfig config = configSource.Configs[section];
				if (config == null)
					throw new Exception("Missing configuration file section: " + section);

				int extensionID = config.GetInt("Extension ID", 0);
				string extensionDll = config.GetString("Extension Dll", "");

				// Find the corresponding extension details.
				int j = 0;
				while ((j < consumerExtensionDetails.Length) && (consumerExtensionDetails[j].ExtensionDLL != extensionDll))
					j++;
				if (j >= consumerExtensionDetails.Length)
					throw new Exception("Invalid GPS extension DLL setting for active extension " + i + ": " + extensionDll);
				ExtensionDetails extensionDetails = consumerExtensionDetails[j];

				// Ensure that the extension ID is unique.
				j = 0;
				while ((j < i) && (activeExtensions[j].ExtensionID != extensionID))
					j++;
				if (j < i)
					throw new Exception("Active extensions " + i + " and " + j + " have a duplicate extension ID: " + extensionID);

				// Create and configure the extension.
				activeExtensions[i] = ActivateExtension(extensionDetails, extensionID,
					"Extension " + extensionID);
			}

			UpdateSortedActiveExtensions();
			RebuildPageMenu();
		}
Exemplo n.º 5
0
		private void DeactivateExtensions()
		{
			if (gpsProvider != null)
			{
				DeactivateExtension(gpsProvider);
				gpsProvider = null;
			}
			if (activeExtensions != null)
			{
				for (int i = 0; i < activeExtensions.Length; i++)
				{
					if (activeExtensions[i] != null)
						DeactivateExtension(activeExtensions[i]);
				}
				activeExtensions = null;
			}
		}
Exemplo n.º 6
0
		private void DeactivateExtension(ActiveExtensionInfo extensionInfo)
		{
			if (extensionInfo.Control != null)
				pluginPanel.Controls.Remove(extensionInfo.Control);
			if (extensionInfo.MenuButton != null)
				pageMenuPanel.ContentControls.Remove(extensionInfo.MenuButton);
			extensionInfo.Extension.ExtensionDispose();
		}
Exemplo n.º 7
0
		private ActiveExtensionInfo ActivateExtension(ExtensionDetails extensionDetails, int extensionID, string configSection)
		{
			// TODO: error recovery from exceptions during ExtensionInit?
			ActiveExtensionInfo extensionInfo = new ActiveExtensionInfo();
			extensionInfo.ExtensionID = extensionID;
			extensionInfo.ExtensionDetails = extensionDetails;

			extensionInfo.Extension = (IExtension)Activator.CreateInstance(extensionDetails.ExtensionType);
			if (configSource.Configs[configSection] == null)
				configSource.AddConfig(configSection);
			extensionInfo.Extension.ExtensionInit(this, extensionID, new NiniIConfigWrapper(configSource.Configs[configSection]));

			if (extensionInfo.ExtensionDetails.ExtensionAttribute.HasUserInterface)
			{
				extensionInfo.Control = extensionInfo.Extension.GetUserInterface();
				extensionInfo.Control.Visible = false;
				pluginPanel.Controls.Add(extensionInfo.Control);
				extensionInfo.Control.Location = new Point(0, 0);
				extensionInfo.Extension.ResizeUserInterface(pluginPanel.ClientSize);
			}

			if (extensionInfo.ExtensionDetails.ExtensionAttribute.IsProvider)
			{
				extensionInfo.Extension.NewGPSFix += new GPSFixEvent(Extension_NewGPSFix);
				extensionInfo.Extension.NewGPSSatelliteData += new GPSSatelliteDataEvent(Extension_NewGPSSatelliteData);
			}

			return extensionInfo;
		}