using ElectronicObserver.Data; using ElectronicObserver.Window.Support; 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; namespace ElectronicObserver.Window.Dialog { public partial class DialogShipGroupSortOrder : Form { public List<KeyValuePair<string, ListSortDirection>> Result { get; private set; } public bool AutoSortEnabled => AutoSortFlag.Checked; public DialogShipGroupSortOrder(DataGridView target, ShipGroupData group) { InitializeComponent(); var rows_enabled = new LinkedList<DataGridViewRow>(); var rows_disabled = new LinkedList<DataGridViewRow>(); var columns = target.Columns.Cast<DataGridViewColumn>(); var names = columns.Select(c => c.Name); if (group.SortOrder == null) group.SortOrder = new List<KeyValuePair<string, ListSortDirection>>(); foreach (var sort in group.SortOrder.Where(s => names.Contains(s.Key))) { var row = new DataGridViewRow(); row.CreateCells(EnabledView); row.SetValues(target.Columns[sort.Key].HeaderText, sort.Value); row.Cells[EnabledView_Name.Index].Tag = sort.Key; row.Tag = columns.FirstOrDefault(c => c.Name == sort.Key).DisplayIndex; rows_enabled.AddLast(row); } foreach (var name in columns.Where(c => c.SortMode != DataGridViewColumnSortMode.NotSortable && !group.SortOrder.Any(s => c.Name == s.Key)) .Select(c => c.Name)) { var row = new DataGridViewRow(); row.CreateCells(DisabledView); row.SetValues(target.Columns[name].HeaderText); row.Cells[DisabledView_Name.Index].Tag = name; row.Tag = columns.FirstOrDefault(c => c.Name == name).DisplayIndex; rows_disabled.AddLast(row); } EnabledView.Rows.AddRange(rows_enabled.ToArray()); DisabledView.Rows.AddRange(rows_disabled.ToArray()); AutoSortFlag.Checked = group.AutoSortEnabled; } private void DialogShipGroupSortOrder_Load(object sender, EventArgs e) { if (Owner != null) Icon = Owner.Icon; } // ボタン操作 private void EnabledView_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == EnabledView_SortDirection.Index) { EnabledView[e.ColumnIndex, e.RowIndex].Value = ((ListSortDirection)EnabledView[e.ColumnIndex, e.RowIndex].Value) == ListSortDirection.Ascending ? ListSortDirection.Descending : ListSortDirection.Ascending; } else if (e.ColumnIndex == EnabledView_Up.Index) { if (!ControlHelper.RowMoveUp(EnabledView, e.RowIndex)) { System.Media.SystemSounds.Exclamation.Play(); } } else if (e.ColumnIndex == EnabledView_Down.Index) { if (!ControlHelper.RowMoveDown(EnabledView, e.RowIndex)) { System.Media.SystemSounds.Exclamation.Play(); } } } private void EnabledView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (e.RowIndex >= 0 && e.ColumnIndex == EnabledView_SortDirection.Index) { switch ((ListSortDirection)e.Value) { case ListSortDirection.Ascending: e.Value = "▲"; e.FormattingApplied = true; break; case ListSortDirection.Descending: e.Value = "▼"; e.FormattingApplied = true; break; } } } private void DisabledView_SortCompare(object sender, DataGridViewSortCompareEventArgs e) { e.SortResult = (int)DisabledView.Rows[e.RowIndex1].Tag - (int)DisabledView.Rows[e.RowIndex2].Tag; e.Handled = true; } private void ButtonUp_Click(object sender, EventArgs e) { if (EnabledView.SelectedRows.Count == 0 || !ControlHelper.RowMoveUp(EnabledView, EnabledView.SelectedRows[0].Index)) { System.Media.SystemSounds.Exclamation.Play(); } } private void ButtonDown_Click(object sender, EventArgs e) { if (EnabledView.SelectedRows.Count == 0 || !ControlHelper.RowMoveDown(EnabledView, EnabledView.SelectedRows[0].Index)) { System.Media.SystemSounds.Exclamation.Play(); } } private void ButtonLeft_Click(object sender, EventArgs e) { var selectedRows = DisabledView.SelectedRows; if (selectedRows.Count == 0) { System.Media.SystemSounds.Asterisk.Play(); return; } var addrows = new DataGridViewRow[selectedRows.Count]; int i = 0; foreach (DataGridViewRow src in selectedRows) { addrows[i] = new DataGridViewRow(); addrows[i].CreateCells(EnabledView); addrows[i].SetValues(src.Cells[DisabledView_Name.Index].Value, ListSortDirection.Ascending); addrows[i].Cells[EnabledView_Name.Index].Tag = src.Cells[DisabledView_Name.Index].Tag; addrows[i].Tag = src.Tag; DisabledView.Rows.Remove(src); i++; } EnabledView.Rows.AddRange(addrows); DisabledView.Sort(DisabledView_Name, ListSortDirection.Ascending); } private void ButtonRight_Click(object sender, EventArgs e) { var selectedRows = EnabledView.SelectedRows; if (selectedRows.Count == 0) { System.Media.SystemSounds.Asterisk.Play(); return; } var addrows = new DataGridViewRow[selectedRows.Count]; int i = 0; foreach (DataGridViewRow src in selectedRows) { addrows[i] = new DataGridViewRow(); addrows[i].CreateCells(DisabledView); addrows[i].SetValues(src.Cells[DisabledView_Name.Index].Value); addrows[i].Cells[DisabledView_Name.Index].Tag = src.Cells[EnabledView_Name.Index].Tag; addrows[i].Tag = src.Tag; EnabledView.Rows.Remove(src); i++; } DisabledView.Rows.AddRange(addrows); DisabledView.Sort(DisabledView_Name, ListSortDirection.Ascending); } private void ButtonLeftAll_Click(object sender, EventArgs e) { var addrows = new DataGridViewRow[DisabledView.Rows.Count]; int i = 0; foreach (DataGridViewRow src in DisabledView.Rows) { addrows[i] = new DataGridViewRow(); addrows[i].CreateCells(EnabledView); addrows[i].SetValues(src.Cells[DisabledView_Name.Index].Value, ListSortDirection.Ascending); addrows[i].Cells[EnabledView_Name.Index].Tag = src.Cells[DisabledView_Name.Index].Tag; addrows[i].Tag = src.Tag; i++; } DisabledView.Rows.Clear(); EnabledView.Rows.AddRange(addrows); DisabledView.Sort(DisabledView_Name, ListSortDirection.Ascending); } private void ButtonRightAll_Click(object sender, EventArgs e) { var addrows = new DataGridViewRow[EnabledView.Rows.Count]; int i = 0; foreach (DataGridViewRow src in EnabledView.Rows) { addrows[i] = new DataGridViewRow(); addrows[i].CreateCells(DisabledView); addrows[i].SetValues(src.Cells[DisabledView_Name.Index].Value); addrows[i].Cells[DisabledView_Name.Index].Tag = src.Cells[EnabledView_Name.Index].Tag; addrows[i].Tag = src.Tag; i++; } EnabledView.Rows.Clear(); DisabledView.Rows.AddRange(addrows); DisabledView.Sort(DisabledView_Name, ListSortDirection.Ascending); } private void ButtonOK_Click(object sender, EventArgs e) { Result = new List<KeyValuePair<string, ListSortDirection>>(EnabledView.Rows.Count); foreach (DataGridViewRow row in EnabledView.Rows) { Result.Add(new KeyValuePair<string, ListSortDirection>((string)row.Cells[EnabledView_Name.Index].Tag, (ListSortDirection)row.Cells[EnabledView_SortDirection.Index].Value)); } DialogResult = System.Windows.Forms.DialogResult.OK; } private void ButtonCancel_Click(object sender, EventArgs e) { DialogResult = System.Windows.Forms.DialogResult.Cancel; } } }