Subversion Repositories Code-Repo

Rev

Rev 16 | Blame | Last modification | View Log | RSS feed

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;

namespace SWAT_USB_App
{
    public partial class form_Drivers : Form
    {
        private static List<Process> toInstall = new List<Process>();
        private static List<RadioButton> formRadioButton = new List<RadioButton>();
        private static form_Drivers _driver_Form = null;
        public static form_Drivers driver_Form_Instance
        {
            set
            {
                _driver_Form = value;
            }
            get
            {
                if (_driver_Form == null)
                    _driver_Form = new form_Drivers();
                return _driver_Form;
            }
        }
        public form_Drivers()
        {
                this.Load += new EventHandler(form_Drivers_Load);
                InitializeComponent();
        }

        void form_Drivers_Load(object sender, EventArgs e)
        {
            try
            {
                if (SettingsParser.DriversList.Count() == 0)
                {
                    DebugText.appendText("No drivers were found in USBSettings.xml");
                    MessageBox.Show("No drivers were found in USBSettings.xml");
                    this.Close();
                }
                else
                {
                    bool modelFound = false;
                    DebugText.appendText("Driver form initializing");
                    if (SettingsParser.driverCheckForMatchingModel)
                        Initialization.GetModelNumber();
                    // Draws the form with a radiobutton for each driver specified in the text file
                    // Location placeholder 
                    int nextXLocation = 6, nextYLocation = 19;
                    // Updates the groupbox size to hold all the radiobuttons
                    this.groupBox_DriverList.Size = new Size(SettingsParser.driverFormWidth - 31, 19 + SettingsParser.DriversList.Count() * 23);
                    // Updates the window size to hold all the radiobuttons + buttons
                    this.Size = new Size(SettingsParser.driverFormWidth, 101 + SettingsParser.DriversList.Count() * 23);
                    formRadioButton.Clear();
                    // Adds a radiobutton for each software item, adds rdoBtn to list formRadioButton
                    for (int i = 0; i < SettingsParser.DriversList.Count(); i++)
                    {
                        RadioButton rdoBtn = new RadioButton();
                        rdoBtn.Name = "rdo_" + SettingsParser.DriversList[i].Name;
                        rdoBtn.AutoSize = true;
                        // Removes the brackets from the name
                        rdoBtn.Text = SettingsParser.DriversList[i].Name;
                        rdoBtn.Location = new Point(nextXLocation, nextYLocation);
                        // Increments the location placeholder for the next radiobutton
                        nextYLocation += 23;
                        this.groupBox_DriverList.Controls.Add(rdoBtn);
                        formRadioButton.Add(rdoBtn);
                        if (SettingsParser.driverCheckForMatchingModel)
                            // If model is detected, check the correct entry
                            if (SettingsParser.DriversList[i].Name.ToLower() == Initialization.computerModel.ToLower() && modelFound == false)
                            {
                                modelFound = true;
                                rdoBtn.Checked = true;
                            }
                    }
                    if (SettingsParser.driverCheckForMatchingModel)
                    {
                        if (modelFound == true)
                        {
                            MessageBox.Show("Drivers were found for this computer.\n" +
                                "Press OK to continue then OK to install drivers.");
                        }
                        else
                        {
                            MessageBox.Show("Drivers were not found for this computer.\n" +
                                "Please go to the manufacturer's site and manually\n" +
                                "download the drivers for this computer.");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                DebugText.appendText("Exception Thrown: " + e.ToString());
                MessageBox.Show(ex.ToString());
            }
        }
        private void updateToInstallList()
        {
            try
            {
                DebugText.appendText("Updating list of processes to run from list of drivers checked");
                toInstall.Clear();
                // Updates list toInstall with processes for each software checked
                for (int i = 0; i < formRadioButton.Count(); i++)
                {
                    if (formRadioButton[i].Checked)
                    {
                        string[] temp = null;
                        // Pulls the setup locations
                        for (int j = 0; j < SettingsParser.DriversList.Count(); j++)
                            if (SettingsParser.DriversList[j].Name == formRadioButton[i].Text)
                            {
                                temp = SettingsParser.DriversList[j].SetupFileLocation;
                                break;
                            }
                        for (int j = 0; j < temp.Count(); j += 2)
                        {
                            Process proc = new Process();
                            proc.StartInfo.FileName = Initialization.pathToSWATDrive + temp[j];
                            proc.StartInfo.Arguments = temp[j + 1];
                            toInstall.Add(proc);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                DebugText.appendText("Exception Thrown: " + e.ToString());
                MessageBox.Show(e.ToString());
            }
        }
        private void startDriverInstallation(List<Process> toInstall, int ID)
        {
            DebugText.appendText("Starting to install drivers from list of processes");
            try
            {
                // Goes through list toInstall and runs each process after the previous one ends
                int tempID = ID;
                if (tempID < toInstall.Count)
                {
                    DebugText.appendText("Running setup " + toInstall[ID].StartInfo.FileName + " with arguments " + toInstall[ID].StartInfo.Arguments);
                    toInstall[ID].Start();
                    while (!toInstall[ID].HasExited)
                    {
                        // Waits for installer to finish before starting the next one
                        Thread.Sleep(3000);
                    }
                    if (toInstall[ID].HasExited)
                    {
                        DebugText.appendText("Setup is detected as finished, running next setup");
                        tempID++;
                        startDriverInstallation(toInstall, tempID);
                    }
                }
            }
            catch (Exception e)
            {
                DebugText.appendText("Exception Thrown: " + e.ToString());
                MessageBox.Show(e.ToString());
            }
        }
        private void btn_Driver_Ok_Click(object sender, EventArgs e)
        {
            updateToInstallList();
            startDriverInstallation(toInstall, 0);
            this.Close();
        }
        private void btn_Driver_Cancel_Click(object sender, EventArgs e)
        {
            DebugText.appendText("Closing driver form");
            driver_Form_Instance.Close();
        }
    }
}