430 lines
12 KiB
C#
430 lines
12 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 PanelCompatibility : DockContent
|
|
{
|
|
const int HEADER_SIZE = 100;
|
|
|
|
MainForm m_Owner = null;
|
|
DataHandler m_DataHandler = null;
|
|
//float m_Scale = 1.0f;
|
|
//float m_OrgFontSize = 10;
|
|
//float m_OrgCellWidth = 10;
|
|
//float m_OrgCellHeight = 10;
|
|
//bool m_bScaling = false;
|
|
|
|
public PanelCompatibility(MainForm owner, DataHandler dataHandler)
|
|
{
|
|
InitializeComponent();
|
|
|
|
m_Owner = owner;
|
|
m_DataHandler = dataHandler;
|
|
|
|
Theme.Apply(this);
|
|
Theme.Apply(dgvMap);
|
|
Theme.Apply(btPivot);
|
|
|
|
dgvMap.CellPainting += DgvMap_CellPainting;
|
|
dgvMap.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
|
|
dgvMap.ColumnHeadersHeight = HEADER_SIZE;
|
|
dgvMap.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing;
|
|
dgvMap.RowHeadersWidth = HEADER_SIZE;
|
|
dgvMap.DefaultCellStyle.Format = "N0";
|
|
|
|
dgvMap.ColumnHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.False;
|
|
dgvMap.RowHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.False;
|
|
|
|
dgvMap.MouseWheel += DgvMap_MouseWheel;
|
|
}
|
|
|
|
public void SpringCheckChanged(string strItem, bool bChecked)
|
|
{
|
|
if (dgvMap.Columns.Count <= 0)
|
|
return;
|
|
|
|
if (dgvMap.Columns[0].HeaderText == "spring")
|
|
{
|
|
foreach(DataGridViewColumn col in dgvMap.Columns)
|
|
{
|
|
if(col.HeaderText == strItem)
|
|
{
|
|
col.Visible = bChecked;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach(DataGridViewRow row in dgvMap.Rows)
|
|
{
|
|
if((string)row.HeaderCell.Value == strItem)
|
|
{
|
|
row.Visible = bChecked;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void TableCheckChanged(string strItem, bool bChecked)
|
|
{
|
|
if (dgvMap.Columns.Count <= 0)
|
|
return;
|
|
|
|
if (dgvMap.Columns[0].HeaderText == "table")
|
|
{
|
|
foreach (DataGridViewColumn col in dgvMap.Columns)
|
|
{
|
|
if (col.HeaderText == strItem)
|
|
{
|
|
col.Visible = bChecked;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach (DataGridViewRow row in dgvMap.Rows)
|
|
{
|
|
if ((string)row.HeaderCell.Value == strItem)
|
|
{
|
|
row.Visible = bChecked;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void SetMaterialChecked(string strPrefName)
|
|
{
|
|
if (dgvMap.Columns.Count <= 0)
|
|
return;
|
|
|
|
for (int i = 1; i < dgvMap.Columns.Count; i++)
|
|
dgvMap.Columns[i].Visible = true;
|
|
for (int i = 1; i < dgvMap.Rows.Count-1; i++)
|
|
dgvMap.Rows[i].Visible = true;
|
|
|
|
Config.UncheckedMaterial cm = Config.GetInstance().m_UncheckedMaterial[strPrefName];
|
|
foreach (string item in cm.m_Springs)
|
|
SpringCheckChanged(item, false);
|
|
foreach (string item in cm.m_Tables)
|
|
TableCheckChanged(item, false);
|
|
}
|
|
|
|
public void UpdateData()
|
|
{
|
|
var Springs = m_DataHandler.GetSpringList();
|
|
var Tables = m_DataHandler.GetTableList();
|
|
|
|
dgvMap.Rows.Clear();
|
|
dgvMap.Columns.Clear();
|
|
|
|
|
|
int iCol = dgvMap.Columns.Add("table", "table");
|
|
dgvMap.Columns[iCol].Width = 10;
|
|
dgvMap.Columns[iCol].SortMode = DataGridViewColumnSortMode.NotSortable;
|
|
foreach (var table in Tables)
|
|
{
|
|
string strHeaderText = table;
|
|
//if (strHeaderText.Length > 10)
|
|
// strHeaderText = strHeaderText.Substring(0, 7) + "...";
|
|
|
|
iCol = dgvMap.Columns.Add(table, strHeaderText);
|
|
dgvMap.Columns[iCol].Width = 10;
|
|
dgvMap.Columns[iCol].SortMode = DataGridViewColumnSortMode.NotSortable;
|
|
dgvMap.Columns[iCol].HeaderCell.ToolTipText = table;
|
|
}
|
|
|
|
int iRow = dgvMap.Rows.Add();
|
|
dgvMap.Rows[iRow].HeaderCell.Value = "spring";
|
|
foreach (var spring in Springs)
|
|
{
|
|
iRow = dgvMap.Rows.Add();
|
|
dgvMap.Rows[iRow].HeaderCell.Value = spring;
|
|
dgvMap.Rows[iRow].HeaderCell.ToolTipText = spring;
|
|
|
|
var Averages = m_DataHandler.GetAvgAll(spring, Config.TEMP_ALL, Config.HUMID_ALL);
|
|
foreach(var avg in Averages)
|
|
{
|
|
if(avg.m_fMax > 0)
|
|
{
|
|
var cell = dgvMap.Rows[iRow].Cells[avg.m_strTable];
|
|
cell.Value = avg.m_fMax;
|
|
Config.ANALYSIS.RISK Risk = Config.ANALYSIS.GetRisk(avg.m_fMax);
|
|
switch(Risk)
|
|
{
|
|
case Config.ANALYSIS.RISK.NO:
|
|
cell.Style.BackColor = Theme.Green;
|
|
break;
|
|
case Config.ANALYSIS.RISK.POTENTIAL:
|
|
cell.Style.BackColor = Theme.Yellow;
|
|
break;
|
|
case Config.ANALYSIS.RISK.HIGH:
|
|
cell.Style.BackColor = Theme.Red;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//m_OrgFontSize = dgvMap.Font.Size;
|
|
//m_OrgCellWidth = (float)dgvMap.Rows[0].Cells[0].Size.Width;
|
|
//m_OrgCellHeight = (float)dgvMap.RowTemplate.Height;
|
|
//m_Scale = 1.0f;
|
|
}
|
|
|
|
foreach (DataGridViewColumn column in dgvMap.Columns)
|
|
{
|
|
column.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeader;
|
|
column.ReadOnly = true;
|
|
}
|
|
dgvMap.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
|
|
dgvMap.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing;
|
|
}
|
|
|
|
public object[] GetData()
|
|
{
|
|
List<string> ColumnHeaders = new List<string>();
|
|
List<string> RowHeaders = new List<string>();
|
|
|
|
var dt = new DataTable();
|
|
dt.Columns.Add(" ");
|
|
foreach (DataGridViewColumn column in dgvMap.Columns)
|
|
{
|
|
dt.Columns.Add(column.HeaderText);
|
|
ColumnHeaders.Add(column.HeaderText);
|
|
}
|
|
|
|
object[] cellValues = new object[dgvMap.Columns.Count];
|
|
foreach (DataGridViewRow row in dgvMap.Rows)
|
|
{
|
|
for (int i = 0; i < row.Cells.Count; i++)
|
|
cellValues[i] = row.Cells[i].Value;
|
|
dt.Rows.Add(cellValues);
|
|
|
|
RowHeaders.Add((string)row.HeaderCell.Value);
|
|
}
|
|
|
|
return new object[]{ dt, ColumnHeaders, RowHeaders };
|
|
}
|
|
|
|
private void DgvMap_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
|
|
{
|
|
DataGridView view = sender as DataGridView;
|
|
|
|
|
|
if (e.RowIndex == -1 && e.ColumnIndex >= 0)
|
|
{
|
|
Brush brush = new SolidBrush(this.dgvMap.ForeColor);
|
|
|
|
e.PaintBackground(e.ClipBounds, true);
|
|
Rectangle rect = view.GetColumnDisplayRectangle(e.ColumnIndex, true);
|
|
Size titleSize = TextRenderer.MeasureText(e.Value.ToString(), e.CellStyle.Font);
|
|
//Size titleSize = e.CellBounds.Size;
|
|
//if (view.ColumnHeadersHeight < titleSize.Width)
|
|
// view.ColumnHeadersHeight = titleSize.Width;
|
|
//if (view.ColumnHeadersHeight > HEADER_SIZE)
|
|
// view.ColumnHeadersHeight = HEADER_SIZE;
|
|
e.Graphics.TranslateTransform(0, titleSize.Width);
|
|
e.Graphics.RotateTransform(-90.0F);
|
|
e.Graphics.DrawString(e.Value.ToString(), this.Font, brush,
|
|
new PointF(rect.Y - (view.ColumnHeadersHeight - titleSize.Width), rect.X + (e.CellBounds.Width - titleSize.Height) / 2));
|
|
e.Graphics.RotateTransform(90.0F);
|
|
e.Graphics.TranslateTransform(0, -titleSize.Width);
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
|
|
void Pivot()
|
|
{
|
|
object[] viewData = GetData();
|
|
DataTable data = (DataTable)viewData[0];
|
|
List<string> ColumnHeaders = (List<string>)viewData[1];
|
|
List<string> RowHeaders = (List<string>)viewData[2];
|
|
|
|
dgvMap.Rows.Clear();
|
|
dgvMap.Columns.Clear();
|
|
|
|
int iColSize = ColumnHeaders.Count;
|
|
int iRowSize = RowHeaders.Count - 1;
|
|
|
|
for (int i = 0; i < iRowSize; i++)
|
|
dgvMap.Columns.Add(RowHeaders[i], RowHeaders[i]);
|
|
|
|
for (int iCol = 0; iCol < iColSize; iCol++)
|
|
{
|
|
int iRowIdx = dgvMap.Rows.Add();
|
|
dgvMap.Rows[iRowIdx].HeaderCell.Value = ColumnHeaders[iCol];
|
|
for (int iRow = 0; iRow < iRowSize; iRow++)
|
|
{
|
|
DataGridViewCell cell = dgvMap.Rows[iRowIdx].Cells[iRow];
|
|
cell.Value = data.Rows[iRow][iCol];
|
|
float fValue = 0;
|
|
if (cell.Value.GetType() != typeof(System.DBNull))
|
|
{
|
|
float.TryParse((string)cell.Value, out fValue);
|
|
Config.ANALYSIS.RISK Risk = Config.ANALYSIS.GetRisk(fValue);
|
|
switch (Risk)
|
|
{
|
|
case Config.ANALYSIS.RISK.NO:
|
|
cell.Style.BackColor = Theme.Green;
|
|
break;
|
|
case Config.ANALYSIS.RISK.POTENTIAL:
|
|
cell.Style.BackColor = Theme.Yellow;
|
|
break;
|
|
case Config.ANALYSIS.RISK.HIGH:
|
|
cell.Style.BackColor = Theme.Red;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < iRowSize; i++)
|
|
dgvMap.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeader;
|
|
}
|
|
|
|
private void btPivot_Click(object sender, EventArgs e)
|
|
{
|
|
Pivot();
|
|
SetMaterialChecked(Config.GetInstance().m_strCurMaterial);
|
|
}
|
|
|
|
private void dgvMap_CellClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
if (e.RowIndex < 0 || e.ColumnIndex < 0)
|
|
return;
|
|
|
|
if (dgvMap.Rows.Count < e.RowIndex || dgvMap.Columns.Count < e.ColumnIndex)
|
|
return;
|
|
|
|
DataGridViewCell cell = dgvMap.Rows[e.RowIndex].Cells[e.ColumnIndex];
|
|
if (cell.Value == null || cell.Value.GetType() == typeof(System.DBNull))
|
|
{
|
|
Label[] aLabels = { lbNormalLow, lbNormalHigh, lbHighLow, lbHighHigh, lbLowTemp };
|
|
for (int i = 0; i < aLabels.Length; i++)
|
|
{
|
|
aLabels[i].Text = "";
|
|
Theme.Apply(aLabels[i]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
string strSpring = "";
|
|
string strTable = "";
|
|
if ((string)dgvMap.Rows[0].HeaderCell.Value == "spring")
|
|
{
|
|
strSpring = (string)dgvMap.Rows[e.RowIndex].HeaderCell.Value;
|
|
strTable = dgvMap.Columns[e.ColumnIndex].HeaderText;
|
|
}
|
|
else
|
|
{
|
|
strTable = (string)dgvMap.Rows[e.RowIndex].HeaderCell.Value;
|
|
strSpring = dgvMap.Columns[e.ColumnIndex].HeaderText;
|
|
}
|
|
|
|
List<float> maxes = m_DataHandler.GetMaxes(strSpring, strTable);
|
|
|
|
Label[] aLabels = { lbNormalLow, lbNormalHigh, lbHighLow, lbHighHigh, lbLowTemp };
|
|
for (int i = 0; i < aLabels.Length; i++)
|
|
{
|
|
aLabels[i].Text = maxes[i].ToString("N0");
|
|
Config.ANALYSIS.RISK Risk = Config.ANALYSIS.GetRisk(maxes[i]);
|
|
switch (Risk)
|
|
{
|
|
case Config.ANALYSIS.RISK.NO:
|
|
aLabels[i].BackColor = Theme.Green;
|
|
break;
|
|
case Config.ANALYSIS.RISK.POTENTIAL:
|
|
aLabels[i].BackColor = Theme.Yellow;
|
|
break;
|
|
case Config.ANALYSIS.RISK.HIGH:
|
|
aLabels[i].BackColor = Theme.Red;
|
|
break;
|
|
}
|
|
}
|
|
|
|
detailPanel.Visible = true;
|
|
}
|
|
}
|
|
|
|
private void dgvMap_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
if (e.RowIndex < 0 || e.ColumnIndex < 0)
|
|
return;
|
|
|
|
if (dgvMap.Rows.Count < e.RowIndex || dgvMap.Columns.Count < e.ColumnIndex)
|
|
return;
|
|
|
|
DataGridViewCell cell = dgvMap.Rows[e.RowIndex].Cells[e.ColumnIndex];
|
|
if (cell.Value == null || cell.Value.GetType() == typeof(System.DBNull))
|
|
return;
|
|
|
|
string strSpring = "";
|
|
string strTable = "";
|
|
if ((string)dgvMap.Rows[0].HeaderCell.Value == "spring")
|
|
{
|
|
strSpring = (string)dgvMap.Rows[e.RowIndex].HeaderCell.Value;
|
|
strTable = dgvMap.Columns[e.ColumnIndex].HeaderText;
|
|
}
|
|
else
|
|
{
|
|
strTable = (string)dgvMap.Rows[e.RowIndex].HeaderCell.Value;
|
|
strSpring = dgvMap.Columns[e.ColumnIndex].HeaderText;
|
|
}
|
|
|
|
m_Owner.OnApplyData(this, strSpring, strTable);
|
|
}
|
|
|
|
public void ZoomGrid(float f)
|
|
{
|
|
//dgvMap.Scale(new SizeF(f, f));
|
|
//dgvMap.Font = new Font(dgvMap.Font.FontFamily, m_OrgFontSize * f, dgvMap.Font.Style);
|
|
//dgvMap.RowTemplate.Height = (int)(m_OrgCellHeight * f);
|
|
|
|
//foreach (DataGridViewColumn col in dgvMap.Columns)
|
|
// col.Width = (int)(m_OrgCellWidth * f);
|
|
//foreach (DataGridViewRow row in dgvMap.Rows)
|
|
// row.Height = (int)(m_OrgCellHeight * f);
|
|
}
|
|
|
|
private void DgvMap_MouseWheel(object sender, MouseEventArgs e)
|
|
{
|
|
//if (m_bScaling == true)
|
|
//{
|
|
// m_Scale += e.Delta / 120.0f * 0.05f;
|
|
// Console.WriteLine(string.Format("m_Scale : {0}", m_Scale));
|
|
|
|
// if (m_Scale <= 0.001f)
|
|
// m_Scale = 0.001f;
|
|
// else if (m_Scale > 5.0f)
|
|
// m_Scale = 5.0f;
|
|
|
|
// ZoomGrid(m_Scale);
|
|
//}
|
|
}
|
|
|
|
private void dgvMap_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
//if (e.Control == true)
|
|
// m_bScaling = true;
|
|
}
|
|
|
|
private void dgvMap_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
//if (e.Control == true)
|
|
// m_bScaling = false;
|
|
}
|
|
}
|
|
}
|