290 lines
6.6 KiB
C#
290 lines
6.6 KiB
C#
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);
|
|
}
|
|
|
|
public void LoadCheckedMaterial(string strPrefName)
|
|
{
|
|
Config.CheckedMaterial cm = Config.GetInstance().m_CheckedMaterial[strPrefName];
|
|
|
|
foreach(ListViewItem item in lvSpring.Items)
|
|
{
|
|
item.Checked = false;
|
|
}
|
|
|
|
foreach(string strSpring in cm.m_Springs)
|
|
{
|
|
foreach (ListViewItem item in lvSpring.Items)
|
|
{
|
|
if(item.Text == strSpring)
|
|
{
|
|
item.Checked = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
foreach (ListViewItem item in lvTable.Items)
|
|
{
|
|
item.Checked = false;
|
|
}
|
|
|
|
foreach (string strTable in cm.m_Tables)
|
|
{
|
|
foreach (ListViewItem item in lvTable.Items)
|
|
{
|
|
if (item.Text == strTable)
|
|
{
|
|
item.Checked = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void SaveCheckedMaterial(string strPrefName)
|
|
{
|
|
Config.CheckedMaterial cm = Config.GetInstance().m_CheckedMaterial[strPrefName];
|
|
|
|
cm.m_Springs.Clear();
|
|
foreach (ListViewItem item in lvSpring.Items)
|
|
{
|
|
if (item.Checked == true)
|
|
cm.m_Springs.Add(item.Text);
|
|
}
|
|
|
|
cm.m_Tables.Clear();
|
|
foreach (ListViewItem item in lvTable.Items)
|
|
{
|
|
if (item.Checked == true)
|
|
cm.m_Tables.Add(item.Text);
|
|
}
|
|
}
|
|
|
|
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;
|
|
|
|
List<string> CheckedItems = new List<string>();
|
|
foreach(ListViewItem item in view.CheckedItems)
|
|
{
|
|
CheckedItems.Add(item.Text);
|
|
}
|
|
|
|
if(view == lvSpring)
|
|
m_Owner.OnSpringCheckChanged(e.Item.Text, e.Item.Checked);
|
|
else
|
|
m_Owner.OnTableCheckChanged(e.Item.Text, e.Item.Checked);
|
|
|
|
//if (view == lvTable)
|
|
// Config.GetInstance().SetTableChecked(CheckedItems);
|
|
//else
|
|
// Config.GetInstance().SetSpringChecked(CheckedItems);
|
|
|
|
|
|
view.Sort();
|
|
}
|
|
|
|
|
|
private class ListViewItemCheckboxComparer : IComparer<ListViewItem>, 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);
|
|
}
|
|
}
|
|
}
|