C2021-002 save and get xml information for table cell shading
This commit is contained in:
parent
2f07372641
commit
60e112cb19
319
PROMS/Volian.Controls.Library/VlnGridCellShading.cs
Normal file
319
PROMS/Volian.Controls.Library/VlnGridCellShading.cs
Normal file
@ -0,0 +1,319 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml.Schema;
|
||||
using System.Drawing;
|
||||
using Volian.Base.Library;
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
[Serializable]
|
||||
[XmlRoot("VlnGridCellShading")]
|
||||
// C2021-004 Table Cell Shading
|
||||
public class VlnGridCellShading
|
||||
{
|
||||
#region Properties
|
||||
private int _Rows;
|
||||
[XmlAttribute("Rows")]
|
||||
public int Rows
|
||||
{
|
||||
get { return _Rows; }
|
||||
set { _Rows = value; }
|
||||
}
|
||||
private int _Columns;
|
||||
[XmlAttribute("Columns")]
|
||||
public int Columns
|
||||
{
|
||||
get { return _Columns; }
|
||||
set { _Columns = value; }
|
||||
}
|
||||
private CellShadingArray _TableShadingInfo;
|
||||
public CellShadingArray TableShadingInfo
|
||||
{
|
||||
get { return _TableShadingInfo; }
|
||||
set { _TableShadingInfo = value; }
|
||||
}
|
||||
#endregion
|
||||
#region ctor
|
||||
public VlnGridCellShading() {; }
|
||||
public VlnGridCellShading(Color defaultCellshading, int rows, int columns)
|
||||
{
|
||||
Rows = rows;
|
||||
Columns = columns;
|
||||
string defCellColorARGB = GetARGBstring(defaultCellshading);
|
||||
TableShadingInfo = new CellShadingArray(defCellColorARGB, Rows, Columns);
|
||||
}
|
||||
#endregion
|
||||
#region SetRange - Set the shading color over a range of cells
|
||||
public Color GetColor(int row, int col)
|
||||
{
|
||||
Color cellColor;
|
||||
// initialize the ARGB value to white
|
||||
int Alpha = 255;
|
||||
int Red = 255;
|
||||
int Green = 255;
|
||||
int Blue = 255;
|
||||
// if the given row or column is within the table range, get the stored cell color
|
||||
// otherwise default to white.
|
||||
// This also catches when row and col are -1 when exiting PROMS while on a table
|
||||
if (row > -1 && col > -1 && row < TableShadingInfo.Rows && col < TableShadingInfo.Columns)
|
||||
{
|
||||
string cellShadeColor = TableShadingInfo[row, col];
|
||||
// The color is saved as ARGB in a string (i.e. "[A=255, R=157, G=187, B-97]") in the table xlm definition (SQL record)
|
||||
cellShadeColor = cellShadeColor.Replace("[", "").Replace("]", "").Replace(" ", ""); // remove starting and ending square brackets
|
||||
// split the string on the commas and find each ARGB value
|
||||
string[] argbSplit = cellShadeColor.Split(',');
|
||||
foreach (string s in argbSplit)
|
||||
{
|
||||
if (s[0] == 'A')
|
||||
Alpha = Convert.ToInt32(s.Substring(2));
|
||||
else if (s[0] == 'R')
|
||||
Red = Convert.ToInt32(s.Substring(2));
|
||||
else if (s[0] == 'G')
|
||||
Green = Convert.ToInt32(s.Substring(2));
|
||||
else if (s[0] == 'B')
|
||||
Blue = Convert.ToInt32(s.Substring(2));
|
||||
}
|
||||
}
|
||||
cellColor = Color.FromArgb(Alpha, Red, Green, Blue);
|
||||
return cellColor;
|
||||
}
|
||||
public string GetARGBstring(Color clr)
|
||||
{
|
||||
// return an ARGB string representation of the color ( i.e "[A=255, R=255, G=255, B=255]")
|
||||
// The format is same as using the ToString() of a color that does not have a name
|
||||
string strARGB = string.Format("[A={0}, R={1}, G={2}, B={3}]", clr.A, clr.R, clr.G, clr.B);
|
||||
return strARGB;
|
||||
}
|
||||
public void SetColor(int row, int col, Color CellColor)
|
||||
{
|
||||
// Set the table cell to the ARGB representation of the passed in color
|
||||
string cellShadeColor = GetARGBstring(CellColor);
|
||||
TableShadingInfo[row, col] = cellShadeColor;
|
||||
return;
|
||||
}
|
||||
#endregion
|
||||
#region Insert and Remove Rows and Columns
|
||||
public void InsertRow(int row)
|
||||
{
|
||||
TableShadingInfo.InsertRow(row);
|
||||
}
|
||||
public void InsertRows(int row, int count)
|
||||
{
|
||||
TableShadingInfo.InsertRows(row, count);
|
||||
}
|
||||
public void DeleteRow(int row)
|
||||
{
|
||||
TableShadingInfo.DeleteRow(row);
|
||||
}
|
||||
public void DeleteRows(int row, int count)
|
||||
{
|
||||
TableShadingInfo.DeleteRows(row, count);
|
||||
}
|
||||
public void InsertColumn(int column)
|
||||
{
|
||||
TableShadingInfo.InsertColumn(column);
|
||||
}
|
||||
public void InsertColumns(int column, int count)
|
||||
{
|
||||
TableShadingInfo.InsertColumns(column, count);
|
||||
}
|
||||
public void DeleteColumn(int column)
|
||||
{
|
||||
TableShadingInfo.DeleteColumn(column);
|
||||
}
|
||||
public void DeleteColumns(int column, int count)
|
||||
{
|
||||
TableShadingInfo.DeleteColumns(column, count);
|
||||
}
|
||||
#endregion
|
||||
#region Serialize
|
||||
public string ConvertToString()
|
||||
{
|
||||
return GenericSerializer<VlnGridCellShading>.StringSerialize(this);
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
return "Volian Custom Cell Shading";
|
||||
}
|
||||
public static VlnGridCellShading Get(string xml)
|
||||
{
|
||||
return GenericSerializer<VlnGridCellShading>.StringDeserialize(xml);
|
||||
}
|
||||
#endregion
|
||||
// Adjust the cell shading array if needed
|
||||
public void CheckAndFixShadingArraySize(int grdRows, int grdCols, Color defaultCellShading)
|
||||
{
|
||||
if (TableShadingInfo.Columns != grdCols || TableShadingInfo.Rows != grdRows)
|
||||
TableShadingInfo = new CellShadingArray(defaultCellShading, grdRows, grdCols, TableShadingInfo.CellShadingColor);
|
||||
}
|
||||
|
||||
}
|
||||
[Serializable]
|
||||
public class CellShadingArray
|
||||
{
|
||||
#region Properties
|
||||
protected static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private int _Rows;
|
||||
[XmlAttribute("Rows")]
|
||||
public int Rows
|
||||
{
|
||||
get { return _Rows; }
|
||||
set { _Rows = value; }
|
||||
}
|
||||
private int _Columns;
|
||||
[XmlAttribute("Columns")]
|
||||
public int Columns
|
||||
{
|
||||
get { return _Columns; }
|
||||
set { _Columns = value; }
|
||||
}
|
||||
private string [] _CellShadingColor; // RGB info in a string
|
||||
public string [] CellShadingColor
|
||||
{
|
||||
get { return _CellShadingColor; }
|
||||
set { _CellShadingColor = value; }
|
||||
}
|
||||
private string _WhiteARGB;
|
||||
public string WhiteARGB
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_WhiteARGB == null)
|
||||
_WhiteARGB = string.Format("[A={0}, R={1}, G={2}, B={3}]", Color.White.A, Color.White.R, Color.White.G, Color.White.B);
|
||||
return _WhiteARGB;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region ctor
|
||||
public CellShadingArray() {; }
|
||||
public CellShadingArray(string defaultShadingColorARGB, int rows, int columns)
|
||||
{
|
||||
Rows = rows;
|
||||
Columns = columns;
|
||||
CellShadingColor = new string[rows * columns];
|
||||
for (int r = 0; r < Rows; r++)
|
||||
for (int c = 0; c < Columns; c++)
|
||||
CellShadingColor[r * Columns + c] = defaultShadingColorARGB;
|
||||
}
|
||||
// Used to automatically adjust the cell shading color array
|
||||
public CellShadingArray(Color defaultShadingColor, int rows, int columns, string[] shadeAry)
|
||||
{
|
||||
Rows = rows;
|
||||
Columns = columns;
|
||||
CellShadingColor = new string[rows * columns];
|
||||
for (int r = 0; r < Rows; r++)
|
||||
for (int c = 0; c < Columns; c++)
|
||||
{
|
||||
int idx = r * Columns + c;
|
||||
if (idx < shadeAry.Length)
|
||||
CellShadingColor[idx] = shadeAry[idx];
|
||||
else
|
||||
CellShadingColor[idx] = defaultShadingColor.ToString();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region Array Access
|
||||
public string this[int r, int c]
|
||||
{
|
||||
get
|
||||
{
|
||||
int indx = r * Columns + c;
|
||||
if (indx < CellShadingColor.Length) return CellShadingColor[r * Columns + c];
|
||||
_MyLog.WarnFormat("TableCellShading: CellShadingColor Array Access out-of-bounds ({0}, {1}) within ({2}, {3})", r, c, Rows, Columns);
|
||||
return WhiteARGB;
|
||||
}
|
||||
set
|
||||
{
|
||||
CellShadingColor[r * Columns + c] = value;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region Insert and Delete Rows and Columns
|
||||
public void InsertRow(int row)
|
||||
{
|
||||
InsertRows(row, 1);
|
||||
}
|
||||
public void InsertRows(int row, int count)
|
||||
{
|
||||
// Create a new Array of the correct size
|
||||
string[] newLines = new string[(Rows + count) * Columns];
|
||||
int newRows = Rows + count;
|
||||
for (int r = 0; r < newRows; r++)
|
||||
{
|
||||
int rSrc = r < row ? r : r > row + count ? r - count : row;
|
||||
if (rSrc > Rows - 1) rSrc = Rows - 1;
|
||||
for (int c = 0; c < Columns; c++)
|
||||
{
|
||||
newLines[r * Columns + c] = CellShadingColor[rSrc * Columns + c];
|
||||
}
|
||||
}
|
||||
CellShadingColor = newLines;
|
||||
Rows = newRows;
|
||||
}
|
||||
public void DeleteRow(int row)
|
||||
{
|
||||
DeleteRows(row, 1);
|
||||
}
|
||||
public void DeleteRows(int row, int count)
|
||||
{
|
||||
string[] newLines = new string[(Rows - count) * Columns];
|
||||
int newRows = Rows - count;
|
||||
for (int r = 0; r < newRows; r++)
|
||||
{
|
||||
int rSrc = r < row ? r : r + count;
|
||||
for (int c = 0; c < Columns; c++)
|
||||
{
|
||||
newLines[r * Columns + c] = CellShadingColor[rSrc * Columns + c];
|
||||
}
|
||||
}
|
||||
CellShadingColor = newLines;
|
||||
Rows = newRows;
|
||||
}
|
||||
public void InsertColumn(int column)
|
||||
{
|
||||
InsertColumns(column, 1);
|
||||
}
|
||||
public void InsertColumns(int column, int count)
|
||||
{
|
||||
// Create a new Array of the correct size
|
||||
string[] newLines = new string[Rows * (Columns + count)];
|
||||
int newColumns = Columns + count;
|
||||
for (int r = 0; r < Rows; r++)
|
||||
{
|
||||
for (int c = 0; c < newColumns; c++)
|
||||
{
|
||||
int cSrc = c < column ? c : c > column + count ? c - count : column;
|
||||
newLines[r * newColumns + c] = CellShadingColor[r * Columns + cSrc];
|
||||
}
|
||||
}
|
||||
CellShadingColor = newLines;
|
||||
Columns = newColumns;
|
||||
}
|
||||
public void DeleteColumn(int column)
|
||||
{
|
||||
DeleteColumns(column, 1);
|
||||
}
|
||||
public void DeleteColumns(int column, int count)
|
||||
{
|
||||
string[] newLines = new string[Rows * (Columns - count)];
|
||||
int newColumns = Columns - count;
|
||||
for (int r = 0; r < Rows; r++)
|
||||
{
|
||||
for (int c = 0; c < newColumns; c++)
|
||||
{
|
||||
int cSrc = c < column ? c : c + count;
|
||||
newLines[r * newColumns + c] = CellShadingColor[r * Columns + cSrc];
|
||||
}
|
||||
}
|
||||
CellShadingColor = newLines;
|
||||
Columns = newColumns;
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user