00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 using System;
00013 using System.Diagnostics;
00014 using System.Windows.Forms;
00015
00016 namespace Mcs.Epm.MicrosoftProject.mpFx.WinForms
00017 {
00018
00019
00020
00021 public partial class EditNewGraphicalIndicatorForm : Form
00022 {
00023 #region Private Constants
00024
00025 private const int VALUES_COLUMN_INDEX = 1;
00026 private const int IMAGES_INDEX_COLUMN_INDEX = 2;
00027 private const int IMAGES_COLUMN_INDEX = 3;
00028 private const int TESTS_COLUMN_INDEX = 0;
00029
00030 #endregion
00031
00032 #region Instance Data
00033
00034 private readonly GraphicalIndicator _indicator;
00035
00036 #endregion
00037
00038 #region Public Properties
00039
00040 public bool ShowValuesInToolTips
00041 {
00042 get { return showValuesInTooltipsCheckbox.Checked; }
00043 }
00044
00045 public string ProjectSummaryCriteriaString
00046 {
00047 get { return _indicator.GetCriteriaString(GraphicalIndicator.CriteriaFor.ProjectSummary); }
00048 }
00049
00050 public string SummaryTaskCriteriaString
00051 {
00052 get { return _indicator.GetCriteriaString(GraphicalIndicator.CriteriaFor.Summary); }
00053 }
00054
00055 public string NonSummaryCriteriaString
00056 {
00057 get { return _indicator.GetCriteriaString(GraphicalIndicator.CriteriaFor.NonSummaryRows); }
00058 }
00059
00060 #endregion
00061
00062 #region Constructor
00063
00064 public EditNewGraphicalIndicatorForm(GraphicalIndicator indicator)
00065 {
00066 InitializeComponent();
00067
00068 _indicator = indicator;
00069
00070 DataGridViewComboBoxColumn imagesIndexColumn = (graphicalIndicatorGridView.Columns[IMAGES_INDEX_COLUMN_INDEX] as DataGridViewComboBoxColumn);
00071
00072 Debug.Assert(imagesIndexColumn != null);
00073
00074 for (int i = 1; i < GraphicalIndicator.MAX_IMAGE_INDEX; i++)
00075 {
00076 imagesIndexColumn.Items.Add(i.ToString());
00077 }
00078
00079 DataGridViewComboBoxColumn testsColumn = (graphicalIndicatorGridView.Columns[TESTS_COLUMN_INDEX] as DataGridViewComboBoxColumn);
00080
00081 Debug.Assert(testsColumn != null);
00082
00083 foreach (string test in _indicator.TestsDisplayNames)
00084 {
00085 testsColumn.Items.Add(test);
00086 }
00087
00088 if (Parent == null)
00089 {
00090 CenterToScreen();
00091 }
00092 else
00093 {
00094 CenterToParent();
00095 }
00096
00097 criteriaForList.SelectedIndex = 0;
00098 }
00099
00100 #endregion
00101
00102 #region Private Methods
00103
00104 private void LoadCriteriaFor(GraphicalIndicator.CriteriaFor criteriaFor)
00105 {
00106 int count;
00107
00108 graphicalIndicatorGridView.Rows.Clear();
00109
00110 switch (criteriaFor)
00111 {
00112 case GraphicalIndicator.CriteriaFor.NonSummaryRows:
00113 count = _indicator.NonSummaryCriteriaCount;
00114 break;
00115 case GraphicalIndicator.CriteriaFor.ProjectSummary:
00116 count = _indicator.ProjectSummaryCriteriaCount;
00117 break;
00118 case GraphicalIndicator.CriteriaFor.Summary:
00119 count = _indicator.SummaryCriteriaCount;
00120 break;
00121 default:
00122 throw new ArgumentOutOfRangeException("criteriaFor");
00123 }
00124
00125 for (int counter = 0; counter < count; counter++)
00126 {
00127 GraphicalIndicator.Criteria criteria = _indicator.GetCriteria(criteriaFor, counter);
00128
00129 graphicalIndicatorGridView.Rows.Add(criteria.Test, criteria.Value, criteria.ImageIndex.ToString(), imageList.Images[criteria.ImageIndex - 1]);
00130 }
00131
00132 if (graphicalIndicatorGridView.Rows.Count == GraphicalIndicator.MAX_NUMBER_OF_CRITERIA)
00133 {
00134 graphicalIndicatorGridView.AllowUserToAddRows = false;
00135 }
00136 }
00137
00138 private bool SaveCriteriaFor(GraphicalIndicator.CriteriaFor criteriaFor)
00139 {
00140 _indicator.ClearCriteria(criteriaFor);
00141
00142 foreach (DataGridViewRow test in graphicalIndicatorGridView.Rows)
00143 {
00144 if (test.IsNewRow != true)
00145 {
00146 try
00147 {
00148 if (test.Cells[0].Value == null)
00149 {
00150 MessageBox.Show("Please enter a test.");
00151 graphicalIndicatorGridView.CurrentCell = test.Cells[TESTS_COLUMN_INDEX];
00152 return false;
00153 }
00154
00155 string testString = test.Cells[TESTS_COLUMN_INDEX].Value.ToString();
00156
00157 if (test.Cells[1].Value == null)
00158 {
00159 MessageBox.Show("Please enter a value.");
00160 graphicalIndicatorGridView.CurrentCell = test.Cells[VALUES_COLUMN_INDEX];
00161 return false;
00162 }
00163
00164 string valueString = test.Cells[VALUES_COLUMN_INDEX].Value.ToString();
00165
00166 if (test.Cells[IMAGES_INDEX_COLUMN_INDEX].Value == null)
00167 {
00168 MessageBox.Show("Please select an image.");
00169 graphicalIndicatorGridView.CurrentCell = test.Cells[IMAGES_INDEX_COLUMN_INDEX];
00170 return false;
00171 }
00172
00173 int imageIndex = Convert.ToInt32(test.Cells[IMAGES_INDEX_COLUMN_INDEX].Value);
00174
00175 _indicator.AddCriteria(criteriaFor, new GraphicalIndicator.Criteria(imageIndex, valueString, testString, _indicator.GetCount(criteriaFor)));
00176 }
00177 catch (Exception exception)
00178 {
00179 MessageBox.Show(exception.Message,
00180 "Test",
00181 MessageBoxButtons.OK,
00182 MessageBoxIcon.Information);
00183 return false;
00184 }
00185 }
00186 }
00187
00188 return true;
00189 }
00190
00191 private GraphicalIndicator.CriteriaFor GetSelectedCriteriaFor()
00192 {
00193 GraphicalIndicator.CriteriaFor criteriaFor = GraphicalIndicator.CriteriaFor.None;
00194
00195 switch (criteriaForList.SelectedIndex)
00196 {
00197 case 0:
00198 criteriaFor = GraphicalIndicator.CriteriaFor.NonSummaryRows;
00199 break;
00200 case 1:
00201 criteriaFor = GraphicalIndicator.CriteriaFor.ProjectSummary;
00202 break;
00203
00204 case 2:
00205 criteriaFor = GraphicalIndicator.CriteriaFor.Summary;
00206 break;
00207 }
00208 return criteriaFor;
00209 }
00210
00211 private void UpdateIndicatorImage(int imageIndex)
00212 {
00213 if (graphicalIndicatorGridView.CurrentCell.ColumnIndex == TESTS_COLUMN_INDEX)
00214 {
00215 return;
00216 }
00217
00218 if (graphicalIndicatorGridView.CurrentRow != null)
00219 {
00220 DataGridViewImageCell imageCell = (graphicalIndicatorGridView.CurrentRow.Cells[IMAGES_COLUMN_INDEX] as DataGridViewImageCell);
00221
00222 Debug.Assert(imageCell != null);
00223
00224 imageCell.Value = imageList.Images[imageIndex];
00225 }
00226 }
00227
00228 #endregion
00229
00230 #region Event Handlers
00231
00232 private void graphicalIndicatorGridView_EditingControlShowing(object sender,
00233 DataGridViewEditingControlShowingEventArgs e)
00234 {
00235 if (graphicalIndicatorGridView.CurrentRow == null)
00236 {
00237 return;
00238 }
00239
00240 ComboBox comboBox = e.Control as ComboBox;
00241
00242 if (comboBox == null || graphicalIndicatorGridView.CurrentCell.ColumnIndex == TESTS_COLUMN_INDEX)
00243 {
00244 return;
00245 }
00246
00247 comboBox.SelectedIndexChanged += comboBox_SelectedIndexChanged;
00248 }
00249
00250 private void comboBox_SelectedIndexChanged(object sender,
00251 EventArgs e)
00252 {
00253 UpdateIndicatorImage(((ComboBox) sender).SelectedIndex);
00254 }
00255
00256 private void okButton_Click(object sender,
00257 EventArgs e)
00258 {
00259 if (SaveCriteriaFor(GetSelectedCriteriaFor()))
00260 {
00261 DialogResult = DialogResult.OK;
00262 Close();
00263 }
00264 }
00265
00266 private void criteriaForList_SelectedIndexChanged(object sender,
00267 EventArgs e)
00268 {
00269 LoadCriteriaFor(GetSelectedCriteriaFor());
00270 }
00271
00272 private void graphicalIndicatorGridView_UserAddedRow(object sender,
00273 DataGridViewRowEventArgs e)
00274 {
00275 if (graphicalIndicatorGridView.Rows.Count - 1 > GraphicalIndicator.MAX_NUMBER_OF_CRITERIA)
00276 {
00277 graphicalIndicatorGridView.CancelEdit();
00278 }
00279 }
00280
00281 private void criteriaForList_Enter(object sender,
00282 EventArgs e)
00283 {
00284 if (!SaveCriteriaFor(GetSelectedCriteriaFor()))
00285 {
00286 graphicalIndicatorGridView.Focus();
00287 graphicalIndicatorGridView.Select();
00288 }
00289 }
00290
00291 private void graphicalIndicatorGridView_RowLeave(object sender,
00292 DataGridViewCellEventArgs e)
00293 {
00294 if (graphicalIndicatorGridView.Rows.Count >= GraphicalIndicator.MAX_NUMBER_OF_CRITERIA)
00295 {
00296 graphicalIndicatorGridView.AllowUserToAddRows = false;
00297 }
00298 else
00299 {
00300 graphicalIndicatorGridView.AllowUserToAddRows = true;
00301 }
00302 }
00303
00304 private void graphicalIndicatorGridView_RowsRemoved(object sender,
00305 DataGridViewRowsRemovedEventArgs e)
00306 {
00307 if (graphicalIndicatorGridView.Rows.Count < GraphicalIndicator.MAX_NUMBER_OF_CRITERIA)
00308 {
00309 graphicalIndicatorGridView.AllowUserToAddRows = true;
00310 }
00311 }
00312
00313 #endregion
00314 }
00315 }