/// <summary> /// Generates an overview over all assigned simulators and displays it in the gridview. /// </summary> private void GenerateOverview() { //construct a table-like structure out of the assignments and bind the gridview to it var assignmentsTable = (from assignment in SimulatorAssignmentsManager.GetSimulatorAssignments() select new { Simulatorkennung = assignment.SimulatorId, Zuweisung = assignment.Assignment != SimulatorAssignmentsManager.SimulatorAssignments.Nicht_zugewiesen ? (assignment.Assignment.ToString() + ", ") : "" + (assignment.Position != SimulatorAssignmentsManager.SimulatorPositions.Nicht_zugewiesen ? assignment.Position.ToString() + ", " : "") + (assignment.Mattress != SimulatorAssignmentsManager.SimulationMattresses.Nicht_zugewiesen ? assignment.Mattress.ToString() : "") }).ToArray(); dataGridViewOverview.Rows.Clear(); dataGridViewOverview.ColumnCount = 3; dataGridViewOverview.Columns[0].Name = "Kennung"; dataGridViewOverview.Columns[1].Name = "Zuweisungen"; dataGridViewOverview.Columns[2].Name = "Status"; dataGridViewOverview.Columns[2].DefaultCellStyle.ForeColor = Color.Red; double percWidth = (double)dataGridViewOverview.Width / 100d; dataGridViewOverview.Columns[0].Width = (int)(percWidth * 20); dataGridViewOverview.Columns[1].Width = (int)(percWidth * 60); dataGridViewOverview.Columns[2].Width = (int)(percWidth * 20); foreach (var item in assignmentsTable) { if (string.IsNullOrEmpty(item.Simulatorkennung)) //prevent "bad" devices from being added to the overview { continue; } dataGridViewOverview.Rows.Add(item.Simulatorkennung, item.Zuweisung.TrimEnd(new char[] { ' ', ',' }).Replace('_', ' '), "Nicht verbunden"); } dataGridViewOverview.ClearSelection(); var context = TaskScheduler.FromCurrentSynchronizationContext(); //for synchronization with the GUI thread var token = Task.Factory.CancellationToken; Task t = Task.Factory.StartNew(() => { UpdateConnectionsOverview(); }, token, TaskCreationOptions.None, context); }
/// <summary> /// Loads any existing simulator assignments and prefills the corresponding controls. /// </summary> private void PrefillForm() { #region Pre-select combobox items cbSerialNbr1.SelectedIndex = cbSerialNbr2.SelectedIndex = cbSerialNbr3.SelectedIndex = cbSerialNbr4.SelectedIndex = 0; if (cbDeviceAssignment1.Items.Count > 0) { cbDeviceAssignment1.SelectedIndex = cbDeviceAssignment2.SelectedIndex = cbDeviceAssignment3.SelectedIndex = cbDeviceAssignment4.SelectedIndex = 0; } if (cbMattress1.Items.Count > 0) { cbMattress1.SelectedIndex = cbMattress2.SelectedIndex = cbMattress3.SelectedIndex = cbMattress4.SelectedIndex = 0; } if (cbPosition1.Items.Count > 4) { cbPosition1.SelectedIndex = 1; cbPosition2.SelectedIndex = 2; cbPosition3.SelectedIndex = 3; cbPosition4.SelectedIndex = 4; } #endregion List <SimulatorAssignment> assignments = SimulatorAssignmentsManager.GetSimulatorAssignments(); assignments = assignments.OrderBy(a => a.SimulatorId).ToList(); if (assignments.Count >= 1) { if (cbSerialNbr1.Items.Contains(assignments[0].SimulatorId)) { cbSerialNbr1.SelectedItem = assignments[0].SimulatorId; } else { cbSerialNbr1.Items.Add(assignments[0].SimulatorId); cbSerialNbr1.ForeColor = Color.Red; } cbDeviceAssignment1.SelectedItem = assignments[0].Assignment.ToString(); cbPosition1.SelectedItem = assignments[0].Position.ToString(); cbMattress1.SelectedItem = assignments[0].Mattress.ToString(); tbCustomName1.Text = assignments[0].CustomAssignmentName; } if (assignments.Count >= 2) { if (cbSerialNbr2.Items.Contains(assignments[1].SimulatorId)) { cbSerialNbr2.SelectedItem = assignments[1].SimulatorId; } else { cbSerialNbr2.Items.Add(assignments[1].SimulatorId); cbSerialNbr2.ForeColor = Color.Red; } cbDeviceAssignment2.SelectedItem = assignments[1].Assignment.ToString(); cbPosition2.SelectedItem = assignments[1].Position.ToString(); cbMattress2.SelectedItem = assignments[1].Mattress.ToString(); tbCustomName2.Text = assignments[1].CustomAssignmentName; } if (assignments.Count >= 3) { if (cbSerialNbr3.Items.Contains(assignments[2].SimulatorId)) { cbSerialNbr3.SelectedItem = assignments[2].SimulatorId; } else { cbSerialNbr3.Items.Add(assignments[2].SimulatorId); cbSerialNbr3.ForeColor = Color.Red; } cbDeviceAssignment3.SelectedItem = assignments[2].Assignment.ToString(); cbPosition3.SelectedItem = assignments[2].Position.ToString(); cbMattress3.SelectedItem = assignments[2].Mattress.ToString(); tbCustomName3.Text = assignments[2].CustomAssignmentName; } if (assignments.Count >= 4) { if (cbSerialNbr4.Items.Contains(assignments[3].SimulatorId)) { cbSerialNbr4.SelectedItem = assignments[3].SimulatorId; } else { cbSerialNbr4.Items.Add(assignments[3].SimulatorId); cbSerialNbr4.ForeColor = Color.Red; } cbDeviceAssignment4.SelectedItem = assignments[3].Assignment.ToString(); cbPosition4.SelectedItem = assignments[3].Position.ToString(); cbMattress4.SelectedItem = assignments[3].Mattress.ToString(); tbCustomName4.Text = assignments[3].CustomAssignmentName; } if (assignments.Count > 4) { MessageBox.Show("Achtung! Es sind Zuweisungen für mehr als 4 Simulatoren vorhanden. Es können jedoch nur 4 angezeigt werden. Um eine Zuweisung zu löschen, klicken Sie auf den entsprechenden Button!", "Zu viele Zuweisungen", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
/// <summary> /// Validates and saves the assignments. /// </summary> private void bSave_Click(object sender, EventArgs e) { #region Validation //only 1 simulator may have the pressure mapping assignment int pressureMappingCnt = 0; if ((string)cbDeviceAssignment1.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung.ToString() || (string)cbDeviceAssignment1.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung_und_Simulation_Kaltschaum.ToString() || (string)cbDeviceAssignment1.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung_und_Simulation_NaturLatex.ToString()) { pressureMappingCnt++; } if ((string)cbDeviceAssignment2.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung.ToString() || (string)cbDeviceAssignment2.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung_und_Simulation_Kaltschaum.ToString() || (string)cbDeviceAssignment2.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung_und_Simulation_NaturLatex.ToString()) { pressureMappingCnt++; } if ((string)cbDeviceAssignment3.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung.ToString() || (string)cbDeviceAssignment3.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung_und_Simulation_Kaltschaum.ToString() || (string)cbDeviceAssignment3.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung_und_Simulation_NaturLatex.ToString()) { pressureMappingCnt++; } if ((string)cbDeviceAssignment4.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung.ToString() || (string)cbDeviceAssignment4.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung_und_Simulation_Kaltschaum.ToString() || (string)cbDeviceAssignment4.Text == SimulatorAssignmentsManager.SimulatorAssignments.Druckmessung_und_Simulation_NaturLatex.ToString()) { pressureMappingCnt++; } if (pressureMappingCnt != 1 && pressureMappingCnt != 2) { MessageBox.Show("Bitte weisen Sie maximal zwei Simulatoren die Funktion \"Druckmessung\" bzw. \"Druckmessung_und_Simulation_Kaltschaum\" und \"Druckmessung_und_Simulation_NaturLatex\" zu!", "Zuweisungen nicht korrekt", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } //check if a simulator has been assigned multiple times List <string> simulatorSerialNbrs = new List <string>() { (string)cbSerialNbr1.Text, (string)cbSerialNbr2.Text, (string)cbSerialNbr3.Text, (string)cbSerialNbr4.Text }; //delete any "Nicht verwendet" selections simulatorSerialNbrs = simulatorSerialNbrs.Where(s => s != COMBOBOX_ITEM_NOT_USED).ToList(); if (simulatorSerialNbrs.Count != simulatorSerialNbrs.Distinct().Count()) { MessageBox.Show("Es wurde mindestens ein Simulator doppelt eingerichtet. Bitte stellen Sie sicher, dass jede Seriennummer nur einmal verwendet wird!", "Simulator doppelt", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } //if a serial number was selected, all other settings have to be made as well #endregion #region Save assignments bool success = true; List <SimulatorAssignment> unchangedAssignments = SimulatorAssignmentsManager.GetSimulatorAssignments(); if (cbSerialNbr1.SelectedIndex > 0) { string simId = cbSerialNbr1.Text; SimulatorAssignmentsManager.SimulatorAssignments assignment = (SimulatorAssignmentsManager.SimulatorAssignments)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulatorAssignments), cbDeviceAssignment1.Text); SimulatorAssignmentsManager.SimulatorPositions position = (SimulatorAssignmentsManager.SimulatorPositions)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulatorPositions), cbPosition1.Text); SimulatorAssignmentsManager.SimulationMattresses mattress = (SimulatorAssignmentsManager.SimulationMattresses)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulationMattresses), cbMattress1.Text); string customName = tbCustomName1.Text; SimulatorAssignment newAssignment = new SimulatorAssignment(simId, assignment, position, mattress, customName); success &= SimulatorAssignmentsManager.AddOrUpdateAssignment(newAssignment); if (unchangedAssignments.Where(a => a.SimulatorId == cbSerialNbr1.Text).Count() == 1) //remove the assignment from the list if it was existing before { unchangedAssignments.Remove(unchangedAssignments.Where(a => a.SimulatorId == cbSerialNbr1.Text).FirstOrDefault()); } } if (cbSerialNbr2.SelectedIndex > 0) { string simId = cbSerialNbr2.Text; SimulatorAssignmentsManager.SimulatorAssignments assignment = (SimulatorAssignmentsManager.SimulatorAssignments)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulatorAssignments), cbDeviceAssignment2.Text); SimulatorAssignmentsManager.SimulatorPositions position = (SimulatorAssignmentsManager.SimulatorPositions)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulatorPositions), cbPosition2.Text); SimulatorAssignmentsManager.SimulationMattresses mattress = (SimulatorAssignmentsManager.SimulationMattresses)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulationMattresses), cbMattress2.Text); string customName = tbCustomName2.Text; SimulatorAssignment newAssignment = new SimulatorAssignment(simId, assignment, position, mattress, customName); success &= SimulatorAssignmentsManager.AddOrUpdateAssignment(newAssignment); if (unchangedAssignments.Where(a => a.SimulatorId == cbSerialNbr2.Text).Count() == 1) //remove the assignment from the list if it was existing before { unchangedAssignments.Remove(unchangedAssignments.Where(a => a.SimulatorId == cbSerialNbr2.Text).FirstOrDefault()); } } if (cbSerialNbr3.SelectedIndex > 0) { string simId = cbSerialNbr3.Text; SimulatorAssignmentsManager.SimulatorAssignments assignment = (SimulatorAssignmentsManager.SimulatorAssignments)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulatorAssignments), cbDeviceAssignment3.Text); SimulatorAssignmentsManager.SimulatorPositions position = (SimulatorAssignmentsManager.SimulatorPositions)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulatorPositions), cbPosition3.Text); SimulatorAssignmentsManager.SimulationMattresses mattress = (SimulatorAssignmentsManager.SimulationMattresses)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulationMattresses), cbMattress3.Text); string customName = tbCustomName3.Text; SimulatorAssignment newAssignment = new SimulatorAssignment(simId, assignment, position, mattress, customName); success &= SimulatorAssignmentsManager.AddOrUpdateAssignment(newAssignment); if (unchangedAssignments.Where(a => a.SimulatorId == cbSerialNbr3.Text).Count() == 1) //remove the assignment from the list if it was existing before { unchangedAssignments.Remove(unchangedAssignments.Where(a => a.SimulatorId == cbSerialNbr3.Text).FirstOrDefault()); } } if (cbSerialNbr4.SelectedIndex > 0) { string simId = cbSerialNbr4.Text; SimulatorAssignmentsManager.SimulatorAssignments assignment = (SimulatorAssignmentsManager.SimulatorAssignments)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulatorAssignments), cbDeviceAssignment4.Text); SimulatorAssignmentsManager.SimulatorPositions position = (SimulatorAssignmentsManager.SimulatorPositions)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulatorPositions), cbPosition4.Text); SimulatorAssignmentsManager.SimulationMattresses mattress = (SimulatorAssignmentsManager.SimulationMattresses)Enum.Parse(typeof(SimulatorAssignmentsManager.SimulationMattresses), cbMattress4.Text); string customName = tbCustomName4.Text; SimulatorAssignment newAssignment = new SimulatorAssignment(simId, assignment, position, mattress, customName); success &= SimulatorAssignmentsManager.AddOrUpdateAssignment(newAssignment); if (unchangedAssignments.Where(a => a.SimulatorId == cbSerialNbr4.Text).Count() == 1) //remove the assignment from the list if it was existing before { unchangedAssignments.Remove(unchangedAssignments.Where(a => a.SimulatorId == cbSerialNbr4.Text).FirstOrDefault()); } } if (success) { //check if an assignment has been deleted if (unchangedAssignments.Count > 0) //if there are assignments left in this list it means that the user selected "Nicht verwendet" combobox item --> delete these assignments { foreach (var assignment in unchangedAssignments) { SimulatorAssignmentsManager.DeleteAssignment(assignment); } } MessageBox.Show("Die Simulatorzuweisungen wurden erfolgreich übernommen.", "Erfolg", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("Fehler beim Speichern der Simulatorzuweisungen!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); } #endregion }