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) { ListViewItem item = lvSpring.Items.Add(x); item.Checked = true; } lvTable.Items.Clear(); lvTable.Items.Add("All"); foreach (var x in TableList) { ListViewItem item = lvTable.Items.Add(x); item.Checked = true; } 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); } #region select 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); } public void SelectSpring(string strSpring) { if (m_SelectedSpring != null) { m_SelectedSpring.Font = lvSpring.Font; m_SelectedSpring.ForeColor = Theme.Forecolor; } foreach (ListViewItem item in lvSpring.Items) { if (item.Text == strSpring) { m_SelectedSpring = item; item.Font = new Font(lvSpring.Font, FontStyle.Bold); item.ForeColor = Theme.Orange; break; } } } 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]); } #endregion select #region check public void LoadUncheckedMaterial(string strPrefName) { Config.UncheckedMaterial cm = Config.GetInstance().m_UncheckedMaterial[strPrefName]; List UncheckedSprings = new List(); List UncheckedTables = new List(); foreach (string s in cm.m_Springs) UncheckedSprings.Add(s); foreach (string s in cm.m_Tables) UncheckedTables.Add(s); foreach (ListViewItem item in lvSpring.Items) { item.Checked = true; } foreach (string strSpring in UncheckedSprings) { foreach (ListViewItem item in lvSpring.Items) { if (item.Text == strSpring) { item.Checked = false; break; } } } foreach (ListViewItem item in lvTable.Items) { item.Checked = true; } foreach (string strTable in UncheckedTables) { foreach (ListViewItem item in lvTable.Items) { if (item.Text == strTable) { item.Checked = false; break; } } } } public void SaveUncheckedMaterial(string strPrefName) { Config.UncheckedMaterial cm = Config.GetInstance().m_UncheckedMaterial[strPrefName]; cm.m_Springs.Clear(); foreach (ListViewItem item in lvSpring.Items) { if (item.Checked == false) cm.m_Springs.Add(item.Text); } cm.m_Tables.Clear(); foreach (ListViewItem item in lvTable.Items) { if (item.Checked == false) cm.m_Tables.Add(item.Text); } } private void Listview_ItemChecked(object sender, ItemCheckedEventArgs e) { ListView view = (ListView)sender; if (view == lvTable && e.Item.Text == "All") e.Item.Checked = true; List UncheckedItems = new List(); foreach (ListViewItem item in view.Items) { if(item.Checked == false) UncheckedItems.Add(item.Text); } if (view == lvTable) Config.GetInstance().SetTableChecked(UncheckedItems); else Config.GetInstance().SetSpringChecked(UncheckedItems); view.Sort(); if (view == lvSpring) m_Owner.OnSpringCheckChanged(e.Item.Text, e.Item.Checked); else m_Owner.OnTableCheckChanged(e.Item.Text, e.Item.Checked); } #endregion check 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); } } }