Click here to Skip to main content
15,893,668 members
Articles / Programming Languages / C#

Universal Framework for Science and Engineering - Part 2: Regression

Rate me:
Please Sign up or sign in to vote.
4.77/5 (19 votes)
11 Jul 20067 min read 51.2K   5K   76  
An article on universal scalable engineering framework applications.
using System;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Configuration.Assemblies;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.ComponentModel;
using System.Data;


using CategoryTheory;
using DiagramUI;
//using ElectromagneticUI;
using FormulaEditor;
using FormulaEditorUI;
using ToolBox;

using DataPerformer;

namespace DataPerformerUI
{
	/// <summary>
	/// Summary description for FormFormulaData.
	/// </summary>
	public class FormDiffEquation : Form, IUpdatableForm, IFormula
	{
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;
		public const string Variables = "abcdfghijklmnoqrstuvwxyz";
		private Hashtable aliasCombo = new Hashtable();

		private DifferentialEquationSolver solver;
		private DataConsumer consumer;
		private IObjectLabel label;
		private System.Windows.Forms.Label labelT;
		private System.Data.DataSet dataSetInitial;
		private System.Data.DataTable dataTableInitial;
		private System.Data.DataColumn dataColumnV;
		private System.Data.DataColumn dataColumnValue;
		private System.Data.DataSet dataSetP;
		private System.Data.DataTable dataTableP;
		private System.Data.DataColumn dataColumnP;
		private System.Windows.Forms.TabPage tabPageVariables;
		private System.Windows.Forms.Button buttonVar;
		private System.Windows.Forms.CheckedListBox checkedListBoxV;
		private System.Windows.Forms.TabPage tabPageEquations;
		private System.Windows.Forms.Button buttonPar;
		private System.Windows.Forms.Button buttonArgs;
		private System.Windows.Forms.Button buttonAccept;
		private System.Windows.Forms.CheckedListBox checkedListBoxP;
		private System.Windows.Forms.Label label4;
		private System.Windows.Forms.Label label1;
		private System.Windows.Forms.Panel panelMea;
		private System.Windows.Forms.Panel panelFormula;
		private System.Windows.Forms.TabPage tabPageConstants;
		private System.Windows.Forms.Button buttonAcceptAliases;
		private System.Windows.Forms.Panel panelComboAlias;
		private System.Windows.Forms.Button buttonAcceptInitial;
		private System.Windows.Forms.Label label3;
		private System.Windows.Forms.DataGrid dataGridP;
		private System.Windows.Forms.DataGrid dataGridInitial;
		private System.Windows.Forms.Label labelInitial;
		private System.Windows.Forms.TabControl tabControlMain;
		private System.Windows.Forms.Label label2;
		private System.Windows.Forms.ComboBox comboBoxTime;
		private System.Windows.Forms.MainMenu mainMenuConsumer;
		private System.Windows.Forms.MenuItem menuItem1;
		private System.Windows.Forms.MenuItem menuItemFont;
		private System.Windows.Forms.Button buttonAcceptComments;
		private System.Windows.Forms.Panel panelComments;
		private System.Data.DataColumn dataColumnVal;
		//private CheckBox[] checkVar;

		public FormDiffEquation()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}
		public FormDiffEquation(IObjectLabel label)
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();
			ResourceService.Resources.LoadControlResources(this);
			EditorReceiver.AddEditorDrag(panelComments);
			PictureReceiver.AddImageDrag(panelComments);
			this.labelT.Text = NamedComponent.GetToolTip(label);
			this.label = label;
			solver = label.Object as DifferentialEquationSolver;
			consumer = solver;
			ArrayList comments = solver.Comments;
			ControlPanel.LoadControls(panelComments, comments);
			string var = "";
			foreach (char c in solver.Keys)
			{
				var += c;
			}
			for (int i = 0; i < Variables.Length; i++)
			{
				char v = Variables[i];
				if (var.IndexOf(v) > -1)
				{
					checkedListBoxV.Items.Add("" + v, CheckState.Checked);
				}
				else
				{
					checkedListBoxV.Items.Add("" + v, CheckState.Unchecked);
				}
			}
			string str = solver.AllParameters;
			List<string> l = solver.AliasNames;
			foreach (char c in str)
			{
				string s = c + "";
				if (l.Contains(s))
				{
					checkedListBoxP.Items.Add(s, CheckState.Checked);
				}
				else
				{
					checkedListBoxP.Items.Add(s, CheckState.Unchecked);
				}
			}
			int top = 0;
			foreach (char c in solver.Keys)
			{
				PanelFormula p = new PanelFormula("" + c, this, panelFormula.Width, 200, Variables, true, null, null);
				p.Left = 0;
				p.Top = top;
				top += p.Height;
				p.Formula = solver[c];
				panelFormula.Controls.Add(p);

			}
			UpdateFormUI();
			fillTable();
			createAndFillAliasComboBox();
		}


		/// <summary>
		/// Updates form UI
		/// </summary>
		public void UpdateFormUI()
		{
			Text = label.RootName;//NamedComponent.GetText(label);
			int y = 20;
			string variables = "";
			for (int i = 0; i < solver.Count; i++)
			{
				IMeasurements arrow = solver[i];
				PanelMeasureFormula panel = new PanelMeasureFormula(arrow, variables, solver);
				panel.Width = 300;
				Panel pan = new Panel();
				pan.Width = panel.Width;
				pan.BackColor = Color.Black;
				pan.Top = y;
				pan.Height = 2;
				panelMea.Controls.Add(pan);
				y += pan.Height;
				panelMea.Controls.Add(panel);
				panel.Left = 0;
				panel.Top = y;
				y += panel.Height + 1;
			}
			foreach (string str in solver.Arguments)
			{
				comboBoxTime.Items.Add(str[0] + "");
				variables += str[0];
			}
			foreach (string str in solver.Arguments)
			{
				string s = str;
				int n = str.Length;
				if (s.Substring(n - 4, 4).Equals("Time"))
				{
					for (int i = 0; i < variables.Length; i++)
					{
						if (variables[i] == str[0])
						{
							this.comboBoxTime.SelectedIndex = i;
							return;
						}
					}
				}
			}
			
			
		}

		public string Formula
		{
			get
			{
				return null;
				//return formulaString;
			}
			set
			{
				/*formulaString = value;
				formula = MathFormula.FromString(FormulaEditorPanel.Sizes,value);
				formula.Position = pointFormula;
				formula.CalculateFullRelativeRectangle();
				formula.CalculatePositions();
				MathFormula f = formula.FullTransform;
				tree = new FormulaTree(f);
				Refresh();*/
			}
		}

		public ArrayList Arguments
		{
			get
			{
				ArrayList list = new ArrayList();
				foreach (Control c in panelMea.Controls)
				{
					if (!(c is PanelMeasureFormula))
					{
						continue;
					}
					PanelMeasureFormula p = c as PanelMeasureFormula;
					p.AddArgumentLabels(list);
				}
				object ob = comboBoxTime.SelectedItem;
				if (ob != null)
				{
					string sn = comboBoxTime.SelectedItem.ToString();
					if (sn.Length != 0)
					{
						list.Add(sn + " = Time");
					}
				}
				return list;
			}
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
			//NamedComponent.RemoveForm(label);
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FormDiffEquation));
			this.labelT = new System.Windows.Forms.Label();
			this.dataTableInitial = new System.Data.DataTable();
			this.dataColumnV = new System.Data.DataColumn();
			this.dataColumnValue = new System.Data.DataColumn();
			this.dataSetInitial = new System.Data.DataSet();
			this.dataTableP = new System.Data.DataTable();
			this.dataColumnP = new System.Data.DataColumn();
			this.dataColumnVal = new System.Data.DataColumn();
			this.dataSetP = new System.Data.DataSet();
			this.tabPageVariables = new System.Windows.Forms.TabPage();
			this.buttonVar = new System.Windows.Forms.Button();
			this.checkedListBoxV = new System.Windows.Forms.CheckedListBox();
			this.tabPageEquations = new System.Windows.Forms.TabPage();
			this.label2 = new System.Windows.Forms.Label();
			this.comboBoxTime = new System.Windows.Forms.ComboBox();
			this.buttonPar = new System.Windows.Forms.Button();
			this.buttonArgs = new System.Windows.Forms.Button();
			this.buttonAccept = new System.Windows.Forms.Button();
			this.checkedListBoxP = new System.Windows.Forms.CheckedListBox();
			this.label4 = new System.Windows.Forms.Label();
			this.label1 = new System.Windows.Forms.Label();
			this.panelMea = new System.Windows.Forms.Panel();
			this.panelFormula = new System.Windows.Forms.Panel();
			this.tabPageConstants = new System.Windows.Forms.TabPage();
			this.buttonAcceptAliases = new System.Windows.Forms.Button();
			this.panelComboAlias = new System.Windows.Forms.Panel();
			this.buttonAcceptInitial = new System.Windows.Forms.Button();
			this.label3 = new System.Windows.Forms.Label();
			this.dataGridP = new System.Windows.Forms.DataGrid();
			this.dataGridInitial = new System.Windows.Forms.DataGrid();
			this.labelInitial = new System.Windows.Forms.Label();
			this.tabControlMain = new System.Windows.Forms.TabControl();
			this.mainMenuConsumer = new System.Windows.Forms.MainMenu();
			this.menuItem1 = new System.Windows.Forms.MenuItem();
			this.menuItemFont = new System.Windows.Forms.MenuItem();
			this.buttonAcceptComments = new System.Windows.Forms.Button();
			this.panelComments = new System.Windows.Forms.Panel();
			((System.ComponentModel.ISupportInitialize)(this.dataTableInitial)).BeginInit();
			((System.ComponentModel.ISupportInitialize)(this.dataSetInitial)).BeginInit();
			((System.ComponentModel.ISupportInitialize)(this.dataTableP)).BeginInit();
			((System.ComponentModel.ISupportInitialize)(this.dataSetP)).BeginInit();
			this.tabPageVariables.SuspendLayout();
			this.tabPageEquations.SuspendLayout();
			this.tabPageConstants.SuspendLayout();
			((System.ComponentModel.ISupportInitialize)(this.dataGridP)).BeginInit();
			((System.ComponentModel.ISupportInitialize)(this.dataGridInitial)).BeginInit();
			this.tabControlMain.SuspendLayout();
			this.SuspendLayout();
			// 
			// labelT
			// 
			this.labelT.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.labelT.Location = new System.Drawing.Point(32, 24);
			this.labelT.Name = "labelT";
			this.labelT.Size = new System.Drawing.Size(632, 23);
			this.labelT.TabIndex = 5;
			this.labelT.Text = "labelT";
			// 
			// dataTableInitial
			// 
			this.dataTableInitial.Columns.AddRange(new System.Data.DataColumn[] {
																					this.dataColumnV,
																					this.dataColumnValue});
			this.dataTableInitial.TableName = "TableInitial";
			// 
			// dataColumnV
			// 
			this.dataColumnV.ColumnName = "Variable";
			this.dataColumnV.ReadOnly = true;
			// 
			// dataColumnValue
			// 
			this.dataColumnValue.ColumnName = "Value";
			this.dataColumnValue.DataType = typeof(System.Double);
			// 
			// dataSetInitial
			// 
			this.dataSetInitial.DataSetName = "NewDataSet";
			this.dataSetInitial.Locale = new System.Globalization.CultureInfo("ru-RU");
			this.dataSetInitial.Tables.AddRange(new System.Data.DataTable[] {
																				this.dataTableInitial});
			// 
			// dataTableP
			// 
			this.dataTableP.Columns.AddRange(new System.Data.DataColumn[] {
																			  this.dataColumnP,
																			  this.dataColumnVal});
			this.dataTableP.TableName = "TableP";
			// 
			// dataColumnP
			// 
			this.dataColumnP.ColumnName = "Parameter";
			this.dataColumnP.ReadOnly = true;
			// 
			// dataColumnVal
			// 
			this.dataColumnVal.ColumnName = "Value";
			this.dataColumnVal.DataType = typeof(System.Double);
			// 
			// dataSetP
			// 
			this.dataSetP.DataSetName = "NewDataSet";
			this.dataSetP.Locale = new System.Globalization.CultureInfo("ru-RU");
			this.dataSetP.Tables.AddRange(new System.Data.DataTable[] {
																		  this.dataTableP});
			// 
			// tabPageVariables
			// 
			this.tabPageVariables.Controls.Add(this.panelComments);
			this.tabPageVariables.Controls.Add(this.buttonVar);
			this.tabPageVariables.Controls.Add(this.checkedListBoxV);
			this.tabPageVariables.Controls.Add(this.buttonAcceptComments);
			this.tabPageVariables.Location = new System.Drawing.Point(4, 22);
			this.tabPageVariables.Name = "tabPageVariables";
			this.tabPageVariables.Size = new System.Drawing.Size(1232, 734);
			this.tabPageVariables.TabIndex = 2;
			this.tabPageVariables.Text = "Variables";
			// 
			// buttonVar
			// 
			this.buttonVar.Location = new System.Drawing.Point(848, 672);
			this.buttonVar.Name = "buttonVar";
			this.buttonVar.Size = new System.Drawing.Size(192, 23);
			this.buttonVar.TabIndex = 1;
			this.buttonVar.Text = "Accept variables";
			this.buttonVar.Click += new System.EventHandler(this.buttonVar_Click);
			// 
			// checkedListBoxV
			// 
			this.checkedListBoxV.Location = new System.Drawing.Point(840, 80);
			this.checkedListBoxV.Name = "checkedListBoxV";
			this.checkedListBoxV.Size = new System.Drawing.Size(216, 559);
			this.checkedListBoxV.TabIndex = 0;
			// 
			// tabPageEquations
			// 
			this.tabPageEquations.Controls.Add(this.label2);
			this.tabPageEquations.Controls.Add(this.comboBoxTime);
			this.tabPageEquations.Controls.Add(this.buttonPar);
			this.tabPageEquations.Controls.Add(this.buttonArgs);
			this.tabPageEquations.Controls.Add(this.buttonAccept);
			this.tabPageEquations.Controls.Add(this.checkedListBoxP);
			this.tabPageEquations.Controls.Add(this.label4);
			this.tabPageEquations.Controls.Add(this.label1);
			this.tabPageEquations.Controls.Add(this.panelMea);
			this.tabPageEquations.Controls.Add(this.panelFormula);
			this.tabPageEquations.Location = new System.Drawing.Point(4, 22);
			this.tabPageEquations.Name = "tabPageEquations";
			this.tabPageEquations.Size = new System.Drawing.Size(1232, 734);
			this.tabPageEquations.TabIndex = 1;
			this.tabPageEquations.Text = "Differential equations";
			// 
			// label2
			// 
			this.label2.Location = new System.Drawing.Point(864, 552);
			this.label2.Name = "label2";
			this.label2.Size = new System.Drawing.Size(56, 23);
			this.label2.TabIndex = 29;
			this.label2.Text = "Time";
			// 
			// comboBoxTime
			// 
			this.comboBoxTime.ItemHeight = 13;
			this.comboBoxTime.Location = new System.Drawing.Point(944, 552);
			this.comboBoxTime.Name = "comboBoxTime";
			this.comboBoxTime.Size = new System.Drawing.Size(121, 21);
			this.comboBoxTime.TabIndex = 28;
			// 
			// buttonPar
			// 
			this.buttonPar.Location = new System.Drawing.Point(456, 664);
			this.buttonPar.Name = "buttonPar";
			this.buttonPar.Size = new System.Drawing.Size(248, 23);
			this.buttonPar.TabIndex = 21;
			this.buttonPar.Text = "Accept constants";
			this.buttonPar.Click += new System.EventHandler(this.buttonPar_Click);
			// 
			// buttonArgs
			// 
			this.buttonArgs.Location = new System.Drawing.Point(744, 664);
			this.buttonArgs.Name = "buttonArgs";
			this.buttonArgs.Size = new System.Drawing.Size(280, 23);
			this.buttonArgs.TabIndex = 20;
			this.buttonArgs.Text = "Accept input parameters";
			this.buttonArgs.Click += new System.EventHandler(this.buttonArgs_Click);
			// 
			// buttonAccept
			// 
			this.buttonAccept.Location = new System.Drawing.Point(200, 664);
			this.buttonAccept.Name = "buttonAccept";
			this.buttonAccept.Size = new System.Drawing.Size(232, 23);
			this.buttonAccept.TabIndex = 19;
			this.buttonAccept.Text = "Accept equations";
			this.buttonAccept.Click += new System.EventHandler(this.buttonAccept_Click);
			// 
			// checkedListBoxP
			// 
			this.checkedListBoxP.Location = new System.Drawing.Point(648, 104);
			this.checkedListBoxP.Name = "checkedListBoxP";
			this.checkedListBoxP.Size = new System.Drawing.Size(120, 409);
			this.checkedListBoxP.TabIndex = 17;
			// 
			// label4
			// 
			this.label4.Location = new System.Drawing.Point(664, 72);
			this.label4.Name = "label4";
			this.label4.TabIndex = 18;
			this.label4.Text = "Constants";
			// 
			// label1
			// 
			this.label1.Location = new System.Drawing.Point(872, 48);
			this.label1.Name = "label1";
			this.label1.Size = new System.Drawing.Size(168, 23);
			this.label1.TabIndex = 13;
			this.label1.Text = "Data sources";
			// 
			// panelMea
			// 
			this.panelMea.AutoScroll = true;
			this.panelMea.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
			this.panelMea.Location = new System.Drawing.Point(800, 104);
			this.panelMea.Name = "panelMea";
			this.panelMea.Size = new System.Drawing.Size(336, 408);
			this.panelMea.TabIndex = 12;
			// 
			// panelFormula
			// 
			this.panelFormula.AutoScroll = true;
			this.panelFormula.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
			this.panelFormula.Location = new System.Drawing.Point(8, 32);
			this.panelFormula.Name = "panelFormula";
			this.panelFormula.Size = new System.Drawing.Size(616, 480);
			this.panelFormula.TabIndex = 11;
			// 
			// tabPageConstants
			// 
			this.tabPageConstants.Controls.Add(this.buttonAcceptAliases);
			this.tabPageConstants.Controls.Add(this.panelComboAlias);
			this.tabPageConstants.Controls.Add(this.buttonAcceptInitial);
			this.tabPageConstants.Controls.Add(this.label3);
			this.tabPageConstants.Controls.Add(this.dataGridP);
			this.tabPageConstants.Controls.Add(this.dataGridInitial);
			this.tabPageConstants.Controls.Add(this.labelInitial);
			this.tabPageConstants.Location = new System.Drawing.Point(4, 22);
			this.tabPageConstants.Name = "tabPageConstants";
			this.tabPageConstants.Size = new System.Drawing.Size(1184, 734);
			this.tabPageConstants.TabIndex = 3;
			this.tabPageConstants.Text = "Constants";
			// 
			// buttonAcceptAliases
			// 
			this.buttonAcceptAliases.Location = new System.Drawing.Point(952, 672);
			this.buttonAcceptAliases.Name = "buttonAcceptAliases";
			this.buttonAcceptAliases.TabIndex = 29;
			this.buttonAcceptAliases.Text = "Accept";
			this.buttonAcceptAliases.Click += new System.EventHandler(this.buttonAcceptAliases_Click);
			// 
			// panelComboAlias
			// 
			this.panelComboAlias.AutoScroll = true;
			this.panelComboAlias.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
			this.panelComboAlias.Location = new System.Drawing.Point(872, 192);
			this.panelComboAlias.Name = "panelComboAlias";
			this.panelComboAlias.Size = new System.Drawing.Size(272, 400);
			this.panelComboAlias.TabIndex = 28;
			// 
			// buttonAcceptInitial
			// 
			this.buttonAcceptInitial.Location = new System.Drawing.Point(424, 632);
			this.buttonAcceptInitial.Name = "buttonAcceptInitial";
			this.buttonAcceptInitial.TabIndex = 26;
			this.buttonAcceptInitial.Text = "Accept";
			this.buttonAcceptInitial.Click += new System.EventHandler(this.buttonAcceptInitial_Click);
			// 
			// label3
			// 
			this.label3.Location = new System.Drawing.Point(600, 136);
			this.label3.Name = "label3";
			this.label3.TabIndex = 24;
			this.label3.Text = "Constants";
			// 
			// dataGridP
			// 
			this.dataGridP.DataMember = "";
			this.dataGridP.DataSource = this.dataTableP;
			this.dataGridP.HeaderForeColor = System.Drawing.SystemColors.ControlText;
			this.dataGridP.Location = new System.Drawing.Point(496, 192);
			this.dataGridP.Name = "dataGridP";
			this.dataGridP.Size = new System.Drawing.Size(344, 400);
			this.dataGridP.TabIndex = 23;
			// 
			// dataGridInitial
			// 
			this.dataGridInitial.DataMember = "";
			this.dataGridInitial.DataSource = this.dataTableInitial;
			this.dataGridInitial.HeaderForeColor = System.Drawing.SystemColors.ControlText;
			this.dataGridInitial.Location = new System.Drawing.Point(48, 192);
			this.dataGridInitial.Name = "dataGridInitial";
			this.dataGridInitial.Size = new System.Drawing.Size(408, 400);
			this.dataGridInitial.TabIndex = 22;
			// 
			// labelInitial
			// 
			this.labelInitial.Location = new System.Drawing.Point(184, 136);
			this.labelInitial.Name = "labelInitial";
			this.labelInitial.Size = new System.Drawing.Size(184, 23);
			this.labelInitial.TabIndex = 21;
			this.labelInitial.Text = "Initial values";
			// 
			// tabControlMain
			// 
			this.tabControlMain.Controls.Add(this.tabPageVariables);
			this.tabControlMain.Controls.Add(this.tabPageEquations);
			this.tabControlMain.Controls.Add(this.tabPageConstants);
			this.tabControlMain.ItemSize = new System.Drawing.Size(59, 18);
			this.tabControlMain.Location = new System.Drawing.Point(24, 64);
			this.tabControlMain.Name = "tabControlMain";
			this.tabControlMain.SelectedIndex = 0;
			this.tabControlMain.Size = new System.Drawing.Size(1192, 760);
			this.tabControlMain.TabIndex = 20;
			// 
			// mainMenuConsumer
			// 
			this.mainMenuConsumer.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																							 this.menuItem1});
			// 
			// menuItem1
			// 
			this.menuItem1.Index = 0;
			this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this.menuItemFont});
			this.menuItem1.Text = "Format";
			// 
			// menuItemFont
			// 
			this.menuItemFont.Index = 0;
			this.menuItemFont.Text = "Font";
			this.menuItemFont.Click += new System.EventHandler(this.menuItemFont_Click);
			// 
			// buttonAcceptComments
			// 
			this.buttonAcceptComments.Location = new System.Drawing.Point(408, 40);
			this.buttonAcceptComments.Name = "buttonAcceptComments";
			this.buttonAcceptComments.Size = new System.Drawing.Size(224, 23);
			this.buttonAcceptComments.TabIndex = 20;
			this.buttonAcceptComments.Text = "Accept comments";
			this.buttonAcceptComments.Click += new System.EventHandler(this.buttonAcceptComments_Click);
			// 
			// panelComments
			// 
			this.panelComments.BackColor = System.Drawing.Color.White;
			this.panelComments.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
			this.panelComments.Location = new System.Drawing.Point(12, 104);
			this.panelComments.Name = "panelComments";
			this.panelComments.Size = new System.Drawing.Size(780, 584);
			this.panelComments.TabIndex = 21;
			// 
			// FormDiffEquation
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(1224, 837);
			this.Controls.Add(this.tabControlMain);
			this.Controls.Add(this.labelT);
			this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
			this.Menu = this.mainMenuConsumer;
			this.Name = "FormDiffEquation";
			this.Text = "FormFormulaData";
			((System.ComponentModel.ISupportInitialize)(this.dataTableInitial)).EndInit();
			((System.ComponentModel.ISupportInitialize)(this.dataSetInitial)).EndInit();
			((System.ComponentModel.ISupportInitialize)(this.dataTableP)).EndInit();
			((System.ComponentModel.ISupportInitialize)(this.dataSetP)).EndInit();
			this.tabPageVariables.ResumeLayout(false);
			this.tabPageEquations.ResumeLayout(false);
			this.tabPageConstants.ResumeLayout(false);
			((System.ComponentModel.ISupportInitialize)(this.dataGridP)).EndInit();
			((System.ComponentModel.ISupportInitialize)(this.dataGridInitial)).EndInit();
			this.tabControlMain.ResumeLayout(false);
			this.ResumeLayout(false);

		}
		#endregion

		private void buttonEdit_Click(object sender, System.EventArgs e)
		{
			FormulaEditorForm form = new FormulaEditorForm();
			form.Formula = Formula;
			form.ShowDialog(this);
			Formula = form.Formula;
		}

		private DynamicalParameter Parameter
		{
			get
			{
				DynamicalParameter par = new DynamicalParameter();
				foreach (Control c in panelMea.Controls)
				{
					if (!(c is PanelMeasureFormula))
					{
						continue;
					}
					PanelMeasureFormula p = c as PanelMeasureFormula;
					p.CreateArguments(par);
				}
				object ob = comboBoxTime.SelectedItem;
				if (ob != null)
				{
					string sn = ob.ToString();
					if (sn.Length != 0)
					{
						//ElectromagneticUIFactory f = label.Desktop.Tools.Factory as ElectromagneticUIFactory;
						IMeasure m = DataConsumer.TimeMeasure;
						par.Add(sn[0], m);
					}
				}

				return par;
			}
		}


		private void fillComboBoxes(string str)
		{
			foreach (Control c in panelMea.Controls)
			{
				if (!(c is PanelMeasureFormula))
				{
					continue;
				}
				PanelMeasureFormula p = c as PanelMeasureFormula;
				p.FillComboboxes(str);
			}
			comboBoxTime.Items.Clear();
			foreach (char c in str)
			{
				comboBoxTime.Items.Add(c + "");
			}

		}

		private void buttonAccept_Click(object sender, System.EventArgs e)
		{
			acceptEquations();
			resetCombo();	
		}

		private void resetCombo()
		{
			foreach (Control c in panelMea.Controls)
			{
				if (!(c is PanelMeasureFormula))
				{
					continue;
				}
				PanelMeasureFormula p = c as PanelMeasureFormula;
				p.ResetCombo();
			}
		}

		private void acceptEquations()
		{
			try
			{
				solver.ClearParameters();
				Hashtable t = new Hashtable();
				foreach (DataRow row in dataTableInitial.Rows)
				{
					string s = row[0] as string;
					double x = (double) row[1];
					t[s[0]] = x;
				}
				dataTableInitial.Clear();
				foreach (Control c in panelFormula.Controls)
				{
					if (!(c is PanelFormula))
					{
						continue;
					}
					PanelFormula p = c as PanelFormula;
					char var = p.Variable;
					solver.AddVariable(var);
					solver.SetVariable(var, p.Formula);
					double x = 0;
					if (t.ContainsKey(var))
					{
						x = (double) t[var];
					}
					dataTableInitial.Rows.Add(new object[]{var + "", x});
				}
				string par = solver.AllParameters;
				checkedListBoxP.Items.Clear();
				foreach (char c in par)
				{
					checkedListBoxP.Items.Add("" + c);
				}
			}
			catch (Exception e)
			{
				DefaultForm.ShowError(this, e);
			}
		}

		private void fillTable()
		{
			try
			{
				dataTableInitial.Clear();
				foreach (char c in solver.Keys)
				{
					dataTableInitial.Rows.Add(new object[]{c + "", solver.GetInitialValue(c)});
				}
				dataTableP.Clear();
				string str = solver.ConstantNames;
				foreach (char c in str)
				{
					string s = "" + c;
					double a = (double)solver[s];
					dataTableP.Rows.Add(new object[]{s, a});
				}
			}
			catch (Exception e)
			{
				DefaultForm.ShowError(this, e);
			}

		}

		private void acceptArg()
		{
			try
			{
				solver.ClearParameters();
				DynamicalParameter p = Parameter;
				foreach (char c in p.Variables)
				{
					IMeasure m = p[c];
                    MeasureParameter par = MeasureDerivation.GetDerivation(m);
                    IMeasure mea = null;
                    if (par == null)
                    {
                        mea = new Measure(m.Parameter, c + "");
                    }
                    else
                    {
                        Double a = 0;
                        mea = new MeasureDerivation(a, m.Parameter, par, c + "");
                    }
					solver.SetParameter(c, mea);
				}
				solver.Arguments = Arguments;
				solver.Prepare();
			}
			catch (Exception e)
			{
				DefaultForm.ShowError(this, e);
			}
		}

		

		private void buttonArgs_Click(object sender, System.EventArgs e)
		{
			acceptArg();
		}

		private void buttonVar_Click(object sender, System.EventArgs e)
		{
			showEquations();
		}
		private void showEquations()
		{
			solver.ClearVariables();
			panelFormula.Controls.Clear();
			int w = panelFormula.Width;
			int y = 0;
			foreach (string s in checkedListBoxV.CheckedItems)
			{
				Panel p = new PanelFormula(s, this, panelFormula.Width, 200, Variables, true, null, null);
				p.Left = 0;
				p.Top = y;
				y += p.Height;
				panelFormula.Controls.Add(p);
			}
		}

		private void buttonAcceptInitial_Click(object sender, System.EventArgs e)
		{
			setValues();
		}

		private void setValues()
		{
			try
			{
				foreach (DataRow row in dataTableInitial.Rows)
				{
//					char c = ((string)row[0])[0];
//					double v = (double)row[1];
					string s = (string)row[0];
					double a = (double)row[1];
					solver[s] = a;//.SetValue(c, v);
				}
				foreach (DataRow row in dataTableP.Rows)
				{
					string s = (string)row[0];
					double a = (double)row[1];
					solver[s] = a;
				}
			}
			catch (Exception e)
			{
				DefaultForm.ShowError(this, e);
			}
		}

		private void buttonPar_Click(object sender, System.EventArgs e)
		{
			acceptParameters();
		}
		private void acceptParameters()
		{
			solver.ResetAliases();
			try
			{
				foreach (string s in checkedListBoxP.CheckedItems)
				{
					solver.AddAlias(s);
				}
				string str = solver.InputParameters;
				fillComboBoxes(str);
				fillTable();
			}
			catch (Exception e)
			{
				DefaultForm.ShowError(this, e);
			}
		}

		private void createAndFillAliasComboBox()
		{
			IMeasurements m = this.solver;
			Panel panelComboAliasInner = new Panel();
			panelComboAliasInner.Width = panelComboAlias.Width;
			panelComboAliasInner.Height = 5;
			panelComboAlias.Controls.Add(panelComboAliasInner);
			int y = 0;
            List<string> al = new List<string>();
			DataConsumer.GetAliases(solver, al);
			Hashtable ea = solver.ExternalAliases;
			for (int i = 0; i < m.Count; i++)
			{
				IMeasure mea = m[i];
				char c = mea.Name[0];
				ComboBox cb = new ComboBox();
				panelComboAliasInner.Controls.Add(cb);
				aliasCombo[c] = cb;
				cb.Width = 121;
				cb.Height = 21;
				cb.Top = 10 + y;
				cb.Left = 10;
				Label l = new Label();
				panelComboAliasInner.Controls.Add(l);
				l.Text = c + "";
				l.Top = cb.Top;
				l.Left = cb.Left + cb.Width + 10;
				foreach (string s in al)
				{
					cb.Items.Add(s);
				}
				y += cb.Height + 10;
				if (ea == null)
				{
					continue;
				}
				if (ea.ContainsKey(c))
				{
					string str = ea[c] as string;
					for (int j = 0; j < cb.Items.Count; j++)
					{
						if (str.Equals(cb.Items[j].ToString()))
						{
							cb.SelectedIndex = j;
							break;
						}
					}
				}
			}
			panelComboAliasInner.Height = y;
			
		}

		private void buttonAcceptAliases_Click(object sender, System.EventArgs e)
		{
			try
			{
				if(solver.ExternalAliases != null)
				{
					solver.ExternalAliases.Clear();
				}
				Hashtable table = new Hashtable();
				foreach (char c in aliasCombo.Keys)
				{
					ComboBox cb = aliasCombo[c] as ComboBox;
					object o = cb.SelectedItem;
					if (o == null)
					{
						continue;
					}
					table[c] = cb.SelectedItem.ToString();
				}
				solver.ExternalAliases = table;
			}
			catch (Exception ex)
			{
				DefaultForm.ShowError(this, ex);
			}
		}

		private void buttonAcceptComments_Click(object sender, System.EventArgs e)
		{
			ArrayList comments = ControlPanel.GetControls(panelComments);
			solver.Comments = comments;
		}

		private void menuItemFont_Click(object sender, System.EventArgs e)
		{
			try
			{
				TextBox box = ControlPanel.GetActiveTextBox(panelComments);
				if (box == null)
				{
					return;
				}
				FontDialog dlg = new FontDialog();
				dlg.ShowDialog(this);
				Font font = dlg.Font;
				box.Font = font;
			}
			catch (Exception ex)
			{
				DefaultForm.ShowError(this, ex);
			}
		}

	}




}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Architect
Russian Federation Russian Federation
Ph. D. Petr Ivankov worked as scientific researcher at Russian Mission Control Centre since 1978 up to 2000. Now he is engaged by Aviation training simulators http://dinamika-avia.com/ . His additional interests are:

1) Noncommutative geometry

http://front.math.ucdavis.edu/author/P.Ivankov

2) Literary work (Russian only)

http://zhurnal.lib.ru/editors/3/3d_m/

3) Scientific articles
http://arxiv.org/find/all/1/au:+Ivankov_Petr/0/1/0/all/0/1

Comments and Discussions