using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using CaeGlobals; namespace CPSO.Forms { public partial class FrmSelectEntity : UserControls.PrePoMaxChildForm { // Variables private string _selectOneOrMultipleText = "Select one or multiple items"; private string _selectOneText = "Select one item"; private string _entityNames; private string _stepName; private NamedClass[] _entitiesToSelect; private string[] _preSelectedEntities; private Controller _controller; private int _minNumOfEntities; private int _maxNumOfEntities; // Properties public string EntitiesName { get { return _entityNames; } set { _entityNames = value; Text = _entityNames + " Selection"; groupBox1.Text = "Available " + _entityNames.ToLower(); MultiSelect = MultiSelect; // sets the label text } } public bool MultiSelect { get { return dgvNames.MultiSelect; } set { dgvNames.MultiSelect = value; // if (dgvNames.MultiSelect) label1.Text = _selectOneOrMultipleText; // + _entityNames.ToLower(); else label1.Text = _selectOneText; // + _entityNames.ToLower(); } } public Action OneEntitySelected { get; set; } public Action OneEntitySelectedInStep { get; set; } public Action MultipleEntitiesSelected { get; set; } public Action MultipleEntitiesSelectedInStep { get; set; } public int MinNumberOfEntities { get { return _minNumOfEntities; } set { _minNumOfEntities = value; if (_minNumOfEntities < 1) _minNumOfEntities = 1; if (_minNumOfEntities > _maxNumOfEntities) _minNumOfEntities = _maxNumOfEntities; } } public int MaxNumberOfEntities { get { return _maxNumOfEntities; } set { _maxNumOfEntities = value; if (_maxNumOfEntities < _minNumOfEntities) _maxNumOfEntities = _minNumOfEntities; } } // Constructors public FrmSelectEntity(Controller controller) { InitializeComponent(); // _controller = controller; // _minNumOfEntities = 1; _maxNumOfEntities = int.MaxValue; } // Event handlers private void btnContinue_Click(object sender, EventArgs e) { try { string[] selectedEntityNames = GetSelectedEntityNames(); // if (dgvNames.MultiSelect) { if (selectedEntityNames.Length < _minNumOfEntities) throw new CaeException("Select at least " + _minNumOfEntities + " " + _entityNames.ToLower() + "."); if (selectedEntityNames.Length > _maxNumOfEntities) throw new CaeException("Select at most " + _maxNumOfEntities + " " + _entityNames.ToLower() + "."); } // First hide since this form calls itself in the following lines Hide(); // if (dgvNames.MultiSelect) { if (_stepName == null) { if (MultipleEntitiesSelected != null) MultipleEntitiesSelected(selectedEntityNames); } else { if (MultipleEntitiesSelectedInStep != null) MultipleEntitiesSelectedInStep(_stepName, selectedEntityNames); } } else { if (_stepName == null) { if (OneEntitySelected != null) OneEntitySelected(selectedEntityNames[0]); } else { if (OneEntitySelectedInStep != null) OneEntitySelectedInStep(_stepName, selectedEntityNames[0]); } } } catch (Exception ex) { ExceptionTools.Show(this, ex); } } private void btnCancel_Click(object sender, EventArgs e) { Hide(); } private void FrmSelectEntity_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; Hide(); } } private void FrmSelectEntity_VisibleChanged(object sender, EventArgs e) { if (Visible) PreSelectEntityNames(); } private void cbHighlight_CheckedChanged(object sender, EventArgs e) { dgvNames_SelectionChanged(null, null); } private void dgvNames_SelectionChanged(object sender, EventArgs e) { if (cbHighlight.Checked) _controller.SelectBasePartsInTree(GetSelectedEntityNames()); else _controller.ClearSelectionHistory(); } private void dgvNames_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex >= 0 && e.RowIndex >= 0) { btnContinue_Click(null, null); } } // Methods public void PrepareForm(string title, bool multiselect, NamedClass[] entitiesToSelect, string[] preSelectedEntities, string stepName = null) { // Disable selection _controller.SetSelectByToOff(); // EntitiesName = title; MultiSelect = multiselect; _entitiesToSelect = entitiesToSelect; _preSelectedEntities = preSelectedEntities; _stepName = stepName; // if (_entitiesToSelect == null) _entitiesToSelect = new NamedClass[0]; if (_preSelectedEntities == null) _preSelectedEntities = new string[0]; if (_entitiesToSelect.Length > 0 && _preSelectedEntities.Length == 0) _preSelectedEntities = new string[] { _entitiesToSelect[0].Name }; // _minNumOfEntities = 1; _maxNumOfEntities = int.MaxValue; } private void PreSelectEntityNames() { dgvNames.Rows.Clear(); int rowId; foreach (var entity in _entitiesToSelect) { rowId = dgvNames.Rows.Add(new object[] { entity.Name }); dgvNames.Rows[rowId].Cells[dgvNames.Columns[0].Name].Tag = entity; } // Detach event dgvNames.SelectionChanged -= dgvNames_SelectionChanged; dgvNames.ClearSelection(); foreach (DataGridViewRow row in dgvNames.Rows) { // setting row.selected = false in SingleSelection mode clears the selected row which has selection = true row.Selected = _preSelectedEntities.Contains(row.Cells[dgvNames.Columns[0].Name].Value); if (dgvNames.SelectedRows.Count > 0 && !MultiSelect) break; } // Reattach event dgvNames.SelectionChanged += dgvNames_SelectionChanged; // dgvNames_SelectionChanged(null, null); } public string[] GetSelectedEntityNames() { List names = new List(); foreach (DataGridViewRow row in dgvNames.SelectedRows) { names.Add((string)row.Cells["colName"].Value); } // return names.ToArray(); } } }