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 WindowsFormsApplication3.Model; using WindowsFormsApplication3.Enums; using WindowsFormsApplication3.FormPage; using WindowsFormsApplication3.DataStorge; namespace WindowsFormsApplication3 { public partial class MainForm : Form { protected static readonly Color[] TREE_VIEW_FORE_COLOR = new Color[] { Color.Black, Color.Black, Color.Black, Color.Red, Color.Black }; protected BaseWorkerForm activeForm; protected Dictionary<string, BaseWorkerForm> formDictionary; protected Dictionary<string, TreeNode> nodeDictionary; protected FormStatus status; protected CheckoutContext checkoutContext; public CheckoutContext CheckoutContext { get { return checkoutContext; } } public MainForm():base() { this.checkoutContext = new CheckoutContext(); InitializeComponent(); } protected void BuildNodeDictionary(TreeNodeCollection nodes) { foreach (TreeNode node in nodes) { if(formDictionary.ContainsKey(node.Name)){ node.Tag=formDictionary[node.Name]; nodeDictionary.Add(node.Name,node); } BuildNodeDictionary(node.Nodes); } } private void buttonTroubleshoot_Click(object sender, EventArgs e) { Execute(); } public void Execute() { status = FormStatus.Processing; buttonTroubleshoot.Enabled = false; foreach (var childf in checkoutContext.formHierachy) { childf.childForm.ResetForm(); childf.childForm.Execute(); childf.childForm.RefreshForm(); } RefreshForm(); ExecuteForm(); } protected void ExecuteForm() { foreach (var childf in checkoutContext.formHierachy) { childf.childForm.Execute(); RefreshForm(); } } public void ChildFormStatusChanged() { RefreshForm(); } private void MainForm_Load(object sender, System.EventArgs e) { nodeDictionary=new Dictionary<string,TreeNode>(); checkoutContext.formHierachy.Add(new FormHierachy("null", new IntroductionForm(checkoutContext, CheckoutStep.Introduction))); //checkoutContext.formHierachy.Add(new FormHierachy("IntroductionForm", new ClientForm(checkoutContext, CheckoutStep.Client))); //checkoutContext.formHierachy.Add(new FormHierachy("IntroductionForm", new ServerForm(checkoutContext, CheckoutStep.Server))); //checkoutContext.formHierachy.Add(new FormHierachy("ServerForm", new CellsForm(checkoutContext, CheckoutStep.Cells))); //checkoutContext.formHierachy.Add(new FormHierachy("ServerForm", new VolumesForm(checkoutContext, CheckoutStep.Volumes))); checkoutContext.formHierachy.Add(new FormHierachy("ClientForm", new OperationSystemForm(checkoutContext, CheckoutStep.OperationSystem))); foreach (var childf in checkoutContext.formHierachy) { childf.childForm.TopLevel = false; childf.childForm.Dock = DockStyle.Fill; childf.childForm.Visible = true; childf.childForm.FormBorderStyle = FormBorderStyle.None; } formDictionary=new Dictionary<string,BaseWorkerForm>(); foreach (var childf in checkoutContext.formHierachy) { formDictionary.Add(childf.childForm.Text, childf.childForm); childf.childForm.FormStatusChanged += ChildFormStatusChanged; } activeForm = formDictionary["IntroductionForm"] as BaseWorkerForm; splitContainer1.Panel2.Controls.Add(activeForm); BuildNodeDictionary(treeViewSteps.Nodes); treeViewSteps.ImageList = ImageConstants.IMAGE_LIST_FORM_STATUS; treeViewSteps.ExpandAll(); RefreshForm(); } public void RefreshForm() { richTextBox.Clear(); RefreshTreeNodes(treeViewSteps.Nodes); foreach(LogEntry le in checkoutContext.logData.logList){ richTextBox.AppendText(le.ToString()); } } public void RefreshTreeNodes(TreeNodeCollection nodes) { foreach (TreeNode node in nodes) { BaseWorkerForm form = node.Tag as BaseWorkerForm; FormStatus formstatus = form == null ? FormStatus.Waiting : form.Status; node.ForeColor = TREE_VIEW_FORE_COLOR[(int)formstatus]; node.SelectedImageIndex = node.ImageIndex = (int)formstatus; RefreshTreeNodes(node.Nodes); } } private void treeViewSteps_AfterSelect(object sender, TreeViewEventArgs e) { TreeNode treeNode = e.Node; if (activeForm != null) splitContainer1.Panel2.Controls.Remove(activeForm); activeForm = treeNode.Tag as BaseWorkerForm; if (activeForm != null) splitContainer1.Panel2.Controls.Add(activeForm); } } }