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 WeifenLuo.WinFormsUI.Docking; namespace friction { public partial class PanelMaterial : DockContent { MainForm m_Owner = null; ListViewItem m_SelectedSpring = null; ListViewItem m_SelectedTable = null; public PanelMaterial(MainForm owner) { InitializeComponent(); m_Owner = owner; this.ApplyTheme(); Theme.Apply(this); Theme.Apply(lvSpring); Theme.Apply(lvTable); lvSpring.ListViewItemSorter = new ListViewItemCheckboxComparer(); lvSpring.ItemChecked += Listview_ItemChecked; lvTable.ListViewItemSorter = new ListViewItemCheckboxComparer(); lvTable.ItemChecked += Listview_ItemChecked; } public void UpdateData(DataHandler data) { m_SelectedSpring = null; m_SelectedTable = null; var SpringList = data.GetSpringList(); var TableList = data.GetTableList(); lvSpring.Items.Clear(); foreach (var x in SpringList) lvSpring.Items.Add(x); lvTable.Items.Clear(); lvTable.Items.Add("All"); foreach (var x in TableList) lvTable.Items.Add(x); lvSpring.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); lvTable.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); lbFileName.Text = data.GetFileName(); SelectSpring(0); SelectTable(0); } private void lvSpring_SizeChanged(object sender, EventArgs e) { Theme.ResizeFullColumn(lvSpring); } private void lvTable_SizeChanged(object sender, EventArgs e) { Theme.ResizeFullColumn(lvTable); } private void SelectSpring(int iIdx) { if (m_SelectedSpring != null) { m_SelectedSpring.Font = lvSpring.Font; m_SelectedSpring.ForeColor = Theme.Forecolor; } m_SelectedSpring = lvSpring.Items[iIdx]; m_SelectedSpring.Font = new Font(lvSpring.Font, FontStyle.Bold); m_SelectedSpring.ForeColor = Theme.Orange; if(m_SelectedSpring != null && m_SelectedTable != null) m_Owner.OnApplyData(this, m_SelectedSpring.Text, m_SelectedTable.Text); } private void SelectTable(int iIdx) { if (m_SelectedTable != null) { m_SelectedTable.Font = lvTable.Font; m_SelectedTable.ForeColor = Theme.Forecolor; } m_SelectedTable = lvTable.Items[iIdx]; m_SelectedTable.Font = new Font(lvTable.Font, FontStyle.Bold); m_SelectedTable.ForeColor = Theme.Orange; if (m_SelectedSpring != null && m_SelectedTable != null) m_Owner.OnApplyData(this, m_SelectedSpring.Text, m_SelectedTable.Text); } public void SelectTable(string strTable) { if (m_SelectedTable != null) { m_SelectedTable.Font = lvTable.Font; m_SelectedTable.ForeColor = Theme.Forecolor; } foreach(ListViewItem item in lvTable.Items) { if(item.Text == strTable) { m_SelectedTable = item; item.Font = new Font(lvTable.Font, FontStyle.Bold); item.ForeColor = Theme.Orange; break; } } } private void lvSpring_MouseDoubleClick(object sender, MouseEventArgs e) { if(lvSpring.SelectedIndices.Count == 1) SelectSpring(lvSpring.SelectedIndices[0]); } private void lvTable_MouseDoubleClick(object sender, MouseEventArgs e) { if (lvTable.SelectedIndices.Count == 1) SelectTable(lvTable.SelectedIndices[0]); } private void Listview_ItemChecked(object sender, ItemCheckedEventArgs e) { ListView view = (ListView)sender; if (view == lvTable && e.Item.Text == "All") e.Item.Checked = true; view.Sort(); } private class ListViewItemCheckboxComparer : IComparer, System.Collections.IComparer { public int Compare(ListViewItem x, ListViewItem y) { if (x.Text == "All") return -1; else if (y.Text == "All") return 1; else if (x.Checked != y.Checked) return -(x.Checked ? 1 : 0).CompareTo(y.Checked ? 1 : 0); else return x.Text.CompareTo(y.Text); } public int Compare(object x, object y) { return Compare(x as ListViewItem, y as ListViewItem); } } private void lvSpring_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) SelectSpring(lvSpring.SelectedIndices[0]); } private void lvTable_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) SelectTable(lvTable.SelectedIndices[0]); } } public class NoDoubleClickAutoCheckListview : ListView { private bool checkFromDoubleClick = false; protected override void OnItemCheck(ItemCheckEventArgs ice) { if (this.checkFromDoubleClick) { ice.NewValue = ice.CurrentValue; this.checkFromDoubleClick = false; } else base.OnItemCheck(ice); } protected override void OnMouseDown(MouseEventArgs e) { // Is this a double-click? if ((e.Button == MouseButtons.Left) && (e.Clicks > 1)) { this.checkFromDoubleClick = true; } base.OnMouseDown(e); } protected override void OnKeyDown(KeyEventArgs e) { this.checkFromDoubleClick = false; base.OnKeyDown(e); } } }