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 ColumnHeaders = new List(); List RowHeaders = new List(); 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 ColumnHeaders = (List)viewData[1]; List RowHeaders = (List)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 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; } } }