Files
friction/PanelMaterial.cs
2017-08-13 04:18:50 +09:00

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);
}
}
}