Free cookie consent management tool by TermsFeed Policy Generator

source: branches/DataAnalysisService/HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard/3.3/Wizard.cs @ 7803

Last change on this file since 7803 was 7803, checked in by spimming, 12 years ago

#1807:

  • data analysis service initial commit
  • wizard added
File size: 5.2 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Linq;
5using System.Windows.Forms;
6
7namespace HeuristicLab.ExperimentGeneration.DataAnalysis.Wizard {
8  public enum WizardButtons {
9    None,
10    Back,
11    Next,
12    Commit
13  }
14  public partial class Wizard : Form {
15    private IList<WizardPage> wizardPages;
16    public IList<WizardPage> WizardPages {
17      get { return wizardPages; }
18    }
19
20    private WizardPage activePage;
21    public WizardPage ActivePage {
22      get { return activePage; }
23    }
24
25    public Wizard() {
26      InitializeComponent();
27      wizardPages = new List<WizardPage>();
28    }
29
30    public void SetActivePage(int pageIndex) {
31      if (pageIndex < 0 || pageIndex >= wizardPages.Count) {
32        throw new ArgumentOutOfRangeException("pageIndex");
33      }
34      SetActivePage(wizardPages[pageIndex]);
35    }
36
37    public void SetActivePage(string pageName) {
38      if (string.IsNullOrEmpty(pageName)) {
39        throw new ArgumentException("Parameter must not be null or empty", "pageName");
40      }
41      WizardPage newPage = WizardPages.Single(p => p.Name == pageName);
42      if (newPage == null) {
43        throw new ArgumentNullException(string.Format("Can't find page with name {0}", pageName));
44      } else {
45        SetActivePage(newPage);
46      }
47
48    }
49
50    public void SetActivePage(WizardPageEventArgs wpea) {
51      if (!wpea.Cancel) {
52        SetActivePage(wpea.NewPage);
53      }
54    }
55
56    public void SetActivePage(WizardPage page) {
57      WizardPage oldActivePage = activePage;
58      if (!pagePanel.Controls.Contains(page)) {
59        pagePanel.Controls.Add(page);
60      }
61      page.Visible = true;
62      activePage = page;
63
64      CancelEventArgs e = new CancelEventArgs();
65      activePage.OnSetActive(e);
66      if (e.Cancel) {
67        activePage.Visible = false;
68        activePage = oldActivePage;
69      }
70
71      foreach (WizardPage wp in WizardPages) {
72        if (wp != activePage) {
73          wp.Visible = false;
74        }
75      }
76    }
77
78    public void SetWizardButton(WizardButtons button) {
79      if (button == WizardButtons.Back) {
80        btnBack.Enabled = true;
81      } else if (button == WizardButtons.Next) {
82        btnCommit.Visible = false;
83        btnCommit.Enabled = false;
84        btnNext.Visible = true;
85        btnNext.Enabled = true;
86        AcceptButton = btnNext;
87      } else if (button == WizardButtons.Commit) {
88        btnCommit.Visible = true;
89        btnCommit.Enabled = true;
90        btnNext.Visible = false;
91        btnNext.Enabled = false;
92        AcceptButton = btnCommit;
93      }
94    }
95
96    public void SetButtonText(WizardButtons button, string buttonText) {
97      if (button == WizardButtons.Commit) {
98        btnCommit.Text = buttonText;
99      }
100    }
101
102    protected virtual void OnQueryCancel(CancelEventArgs e) {
103      activePage.OnQueryCancel(e);
104    }
105
106    private void SetWizardSizeToFitAllPages() {
107      System.Drawing.Size maxPageSize = new System.Drawing.Size(controlPanel.Width, 0);
108      foreach (WizardPage page in WizardPages) {
109        if (page.Width > maxPageSize.Width) {
110          maxPageSize.Width = page.Width;
111        }
112        if (page.Height > maxPageSize.Height) {
113          maxPageSize.Height = page.Height;
114        }
115      }
116      foreach (WizardPage page in WizardPages) {
117        page.Size = maxPageSize;
118      }
119      System.Drawing.Size newSize = maxPageSize + (Size - pagePanel.Size);
120      Size = newSize;
121    }
122
123    private WizardPageEventArgs BuildChangePageEventArgs(int delta) {
124      int activePageIndex = WizardPages.IndexOf(ActivePage);
125      int nextPageIndex = activePageIndex + delta;
126
127      if (nextPageIndex < 0 || nextPageIndex >= WizardPages.Count)
128        nextPageIndex = activePageIndex;
129
130      WizardPage nextPage = WizardPages[nextPageIndex];
131      WizardPageEventArgs wpea = new WizardPageEventArgs();
132      wpea.NewPage = nextPage.Name;
133      wpea.Cancel = false;
134
135      return wpea;
136    }
137
138    private void btnNext_Click(object sender, EventArgs e) {
139      WizardPageEventArgs wpea = BuildChangePageEventArgs(1);
140      ActivePage.OnWizardNext(wpea);
141      SetActivePage(wpea);
142    }
143
144    private void btnBack_Click(object sender, EventArgs e) {
145      WizardPageEventArgs wpea = BuildChangePageEventArgs(-1);
146      ActivePage.OnWizardBack(wpea);
147      SetActivePage(wpea);
148    }
149
150    private void btnCommit_Click(object sender, EventArgs e) {
151      CancelEventArgs cea = new CancelEventArgs();
152      ActivePage.OnWizardCommit(cea);
153      if (!cea.Cancel) {
154        DialogResult = DialogResult.OK;
155        Close();
156      }
157    }
158
159    private void btnCancel_Click(object sender, EventArgs e) {
160      DialogResult = DialogResult.Cancel;
161      Close();
162    }
163
164    private void Wizard_Load(object sender, EventArgs e) {
165      if (WizardPages.Count > 0) {
166        SetWizardSizeToFitAllPages();
167        SetActivePage(0);
168      } else {
169        SetWizardButton(WizardButtons.None);
170      }
171    }
172
173    private void Wizard_Closing(object sender, CancelEventArgs e) {
174      if (!btnCancel.Enabled) {
175        e.Cancel = true;
176      } else if (btnCommit.Enabled) {
177        OnQueryCancel(e);
178      }
179    }
180  }
181}
Note: See TracBrowser for help on using the repository browser.