private void btnSave_Click(object sender, EventArgs e)
        {
            Shaft s = new Shaft();
            s.Name = txtName.Text;
            s.Diameter = Convert.ToDouble(numDiameter.Value);
            s.KeyCutWidth = Convert.ToDouble(numKeyCutWidth.Value);
            s.KeyCutHeigth = Convert.ToDouble(numKeyCutHeight.Value);
            s.KeyCutLength = Convert.ToDouble(numKeyCutLength.Value);
            s.Material = material;

            if (s.Name != "" && s.Material != null)
            {
                Database1DataSet1TableAdapters.Shaft1TableAdapter sta = new Database1DataSet1TableAdapters.Shaft1TableAdapter();
                sta.Insert(s.Name, s.Diameter, s.Material.ID, s.KeyCutWidth, s.KeyCutHeigth, s.KeyCutLength);
                s.ID = (int)sta.getID(s.Name, s.Diameter, s.Material.ID, s.KeyCutWidth, s.KeyCutHeigth, s.KeyCutLength);
                Program.shaftList.Add(s);
                DialogResult = DialogResult.OK;
            }
            else
            {
                if (s.Name == "")
                    MessageBox.Show("You have to add a Name to your shaft", "Impossible to save the gear", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                else
                    MessageBox.Show("You have to add a Material to your shaft", "Impossible to save the gear", MessageBoxButtons.OK, MessageBoxIcon.Warning);

            }
        }
        private void btnRemove_Click(object sender, EventArgs e)
        {
            if (DialogResult.OK == MessageBox.Show("You may delete Gears and Gear Boxes associated. Do you want to continue ?", "Caution", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning))
            {
                if (listShaft.SelectedItems.Count > 0)
                {
                    Shaft shaftToDelete = new Shaft();
                    shaftToDelete = (Shaft)listShaft.SelectedItems[0];

                    Program.shaftList.Remove(shaftToDelete);
                    Database1DataSet1TableAdapters.Shaft1TableAdapter sta = new Database1DataSet1TableAdapters.Shaft1TableAdapter();
                    Database1DataSet1TableAdapters.GearsTableAdapter gta = new Database1DataSet1TableAdapters.GearsTableAdapter();
                    Database1DataSet1TableAdapters.GearBoxTableAdapter gbta = new Database1DataSet1TableAdapters.GearBoxTableAdapter();

                    List<int> gearIds = Util.listOfGearIds(shaftToDelete.ID, gta);
                    try
                    {
                        foreach (int g in gearIds)
                        {
                            gbta.DeleteInputGearQuery(g);
                            gbta.DeleteOutputGearQuery(g);
                            Gear gear = Util.getGearById(g);
                            Program.gearList.Remove(gear);
                        }

                        gta.DeleteShaftQuery(shaftToDelete.ID);
                        sta.Delete(shaftToDelete.ID, shaftToDelete.Name, shaftToDelete.Diameter, shaftToDelete.Material.ID, shaftToDelete.KeyCutWidth, shaftToDelete.KeyCutHeigth, shaftToDelete.KeyCutLength);
                        Util.refreshGearBoxList();
                    }
                    catch (Exception ex) { }
                }
                refreshList();
                treeViewShaft.Nodes.Clear();
                propertyGridShaft.SelectedObject = null;
                btnRemove.Enabled = false;
                btnEdit.Enabled = false;
                btnSelect.Enabled = false;
            }
        }
        private void GearBoxGenerator_Load(object sender, EventArgs e)
        {
            // Get the Materials
            Database1DataSet1TableAdapters.MaterialsTableAdapter mta = new Database1DataSet1TableAdapters.MaterialsTableAdapter();
            Database1DataSet1.MaterialsDataTable MaterialsFromDB = new Database1DataSet1.MaterialsDataTable();
            mta.Fill(MaterialsFromDB);

            foreach(Database1DataSet1.MaterialsRow row in MaterialsFromDB.Rows){
                Material mat = new Material();
                mat.ID = row.ID;
                mat.Name = row.MaterialName;
                mat.Density = row.Density;
                mat.yieldStress = row.YieldStress;
                mat.youngsModulus = row.YoungsModulus;

                Program.materialList.Add(mat);

            }

            // Get the Shafts
            Database1DataSet1TableAdapters.Shaft1TableAdapter sta = new Database1DataSet1TableAdapters.Shaft1TableAdapter();
            Database1DataSet1.Shaft1DataTable ShaftsFromDB = new Database1DataSet1.Shaft1DataTable();
            sta.Fill(ShaftsFromDB);

            foreach (Database1DataSet1.Shaft1Row row in ShaftsFromDB.Rows) {
                Shaft shaft = new Shaft();
                shaft.ID = row.ID;
                shaft.Name = row.ShaftName;
                shaft.Diameter = row.Diameter;
                shaft.KeyCutHeigth = row.KeyCutHeight;
                shaft.KeyCutLength = row.KeyCutLenght;
                shaft.KeyCutWidth = row.KeyCutWidth;
                shaft.Material = Util.getMaterialById(row.MaterialID);

                Program.shaftList.Add(shaft);
            }

            Database1DataSet1TableAdapters.GearsTableAdapter gta = new Database1DataSet1TableAdapters.GearsTableAdapter();
            Database1DataSet1.GearsDataTable GearsFromDB = new Database1DataSet1.GearsDataTable();
            gta.Fill(GearsFromDB);

            foreach (Database1DataSet1.GearsRow row in GearsFromDB.Rows)
            {
                Gear gear = new Gear();
                gear.ID = row.ID;
                gear.Alpha = row.Alpha;
                gear.GearModule = row.GearModule;
                gear.Torque = row.Torque;
                gear.WantedRadius = row.WantedRadius;
                gear.Name = row.GearName;
                gear.Z = row.Z;
                gear.Phi = row.Phi;
                gear.R_base = row.RBase;
                gear.R_foot = row.RFoot;
                gear.R_pitch = row.RPitch;
                gear.R_top = row.RTop;
                gear.Material = Util.getMaterialById(row.MaterialID);
                gear.Shaft = Util.getShaftById(row.ShaftID);

                Program.gearList.Add(gear);
            }

            Util.refreshGearBoxList();
        }
        private Shaft createShaft(Material material, Double torque, bool isInput)
        {
            if (isInput)
                tsStatusLabel.Text = "Calculation of the input Shaft...";
            else
                tsStatusLabel.Text = "Calculation of the output Shaft...";
            Shaft shaft = new Shaft();
            if (isInput)
                shaft.Name = txtName.Text + " Input Shaft";
            else
                shaft.Name = txtName.Text + " Output Shaft";
            shaft.Material = material;

            // MathCAD
            Mathcad.Application mathCadApp =null;
            try
            {
                mathCadApp = System.Runtime.InteropServices.Marshal.GetActiveObject("MathCAD.Application") as Mathcad.Application;
            }
            catch (Exception ex)
            {
                mathCadApp = System.Activator.CreateInstance(Type.GetTypeFromProgID("MathCAD.Application")) as Mathcad.Application;
            }
            finally {
                mathCadApp.Worksheets.Open(path+"/Shaft dimensioning.xmcd");
            }
            mathCadApp.Visible = true;

            Mathcad.Worksheet ws = mathCadApp.ActiveWorksheet;
            ws.SetValue("yield_stress", material.yieldStress);
            ws.SetValue("M", torque*1000);

            String value;
            value = ws.GetValue("diameter").asString;
            shaft.Diameter = Convert.ToInt32(value);

            // Microsoft Excel
            Microsoft.Office.Interop.Excel.Application excelApp = null;
            try
            {
                excelApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") as Microsoft.Office.Interop.Excel.Application;
                if (!excelApp.ActiveWorkbook.Path.Equals(path) || !excelApp.ActiveWorkbook.Path.Equals(path))
                    excelApp.Workbooks.Open(path + "/Key design.xlsx");
            }
            catch (Exception ex)
            {
                excelApp = System.Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application")) as Microsoft.Office.Interop.Excel.Application;
                excelApp.Workbooks.Open(path + "/Key design.xlsx");
            }
               // excelApp.Visible=true;

            Microsoft.Office.Interop.Excel.Worksheet excelWs = excelApp.ActiveWorkbook.ActiveSheet;
            excelWs.Cells[5,1] = torque;
            excelWs.Cells[5, 3] = shaft.Diameter;

            shaft.KeyCutLength = Convert.ToDouble(excelWs.Cells[5,8].Value);
            shaft.KeyCutHeigth = Convert.ToDouble(excelWs.Cells[5, 5].Value);
            shaft.KeyCutWidth = Convert.ToDouble(excelWs.Cells[5,4].Value);

            if (isInput)
            {
                inputC1 = Convert.ToDouble(excelWs.Cells[5, 6].Value);
                inputC2 = Convert.ToDouble(excelWs.Cells[5, 7].Value);
            }
            else
            {
                outputC1 = Convert.ToDouble(excelWs.Cells[5, 6].Value);
                outputC2 = Convert.ToDouble(excelWs.Cells[5, 7].Value);
            }

            return shaft;
        }
        private void btnShaft_Click(object sender, EventArgs e)
        {
            ShaftEditorForm shaftEditor = new ShaftEditorForm();
            shaftEditor.menuStripVisible(false);
            if (shaftEditor.ShowDialog() == DialogResult.OK)
            {
                // Ajouter le nom du Shaft
                shaft = sTemp;

                //Changer le bouton Choose correspondant
                txtShaft.Text = shaft.Name;
                txtShaft.Visible = true;
                btnShaft.Text = "...";
                btnShaft.Size = btnSize;
                btnShaft.Location = new Point(186, 129);

            }
        }