Reduced duplicated Audits
Added comments Added and used calculated IsDirty Property
This commit is contained in:
		@@ -17,6 +17,12 @@ namespace Volian.Controls.Library
 | 
				
			|||||||
	public partial class GridItem : EditItem
 | 
						public partial class GridItem : EditItem
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		#region Fields
 | 
							#region Fields
 | 
				
			||||||
 | 
							private bool _IsSaving;
 | 
				
			||||||
 | 
							public bool IsSaving
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get { return _IsSaving; }
 | 
				
			||||||
 | 
								set { _IsSaving = value; }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		public VlnFlexGrid MyFlexGrid
 | 
							public VlnFlexGrid MyFlexGrid
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			get { return _MyFlexGrid; }
 | 
								get { return _MyFlexGrid; }
 | 
				
			||||||
@@ -381,8 +387,10 @@ namespace Volian.Controls.Library
 | 
				
			|||||||
			//_MyToolTip.SetSuperTooltip(MyStepRTB, tpi);
 | 
								//_MyToolTip.SetSuperTooltip(MyStepRTB, tpi);
 | 
				
			||||||
			_MyToolTip.SetSuperTooltip(MyFlexGrid, tpi);
 | 
								_MyToolTip.SetSuperTooltip(MyFlexGrid, tpi);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							private bool DoNotRefresh = false;
 | 
				
			||||||
		public override void RefreshContent() 
 | 
							public override void RefreshContent() 
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								if (DoNotRefresh) return;
 | 
				
			||||||
			_ActiveMode = MyFlexGrid.ContainsFocus;
 | 
								_ActiveMode = MyFlexGrid.ContainsFocus;
 | 
				
			||||||
			using (Grid myGrid = MyItemInfo.MyContent.MyGrid.Get())
 | 
								using (Grid myGrid = MyItemInfo.MyContent.MyGrid.Get())
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -432,6 +440,7 @@ namespace Volian.Controls.Library
 | 
				
			|||||||
		public override void SetFocus() { MyFlexGrid.Focus();}
 | 
							public override void SetFocus() { MyFlexGrid.Focus();}
 | 
				
			||||||
		public override void SaveContents() 
 | 
							public override void SaveContents() 
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								if (!MyFlexGrid.IsDirty && !IsSaving) return;
 | 
				
			||||||
			List<int> RtfRoUsageList = new List<int>();
 | 
								List<int> RtfRoUsageList = new List<int>();
 | 
				
			||||||
			List<int> RtfTransList = new List<int>();
 | 
								List<int> RtfTransList = new List<int>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1144,17 +1153,22 @@ namespace Volian.Controls.Library
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		public override void SaveCurrentAndContents()
 | 
							public override void SaveCurrentAndContents()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								IsSaving = true;
 | 
				
			||||||
			if (MyFlexGrid.Row >= 0 && MyFlexGrid.Col >= 0 && MyStepRTB.EditMode) // Only if a Cell is Selected
 | 
								if (MyFlexGrid.Row >= 0 && MyFlexGrid.Col >= 0 && MyStepRTB.EditMode) // Only if a Cell is Selected
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				int row = MyFlexGrid.Row;
 | 
									int row = MyFlexGrid.Row;
 | 
				
			||||||
				int col = MyFlexGrid.Col;
 | 
									int col = MyFlexGrid.Col;
 | 
				
			||||||
				SaveContents();
 | 
									//SaveContents();
 | 
				
			||||||
 | 
									DoNotRefresh = true;
 | 
				
			||||||
				MyStepRTB.Rtf = MyStepRTB.DoNewLinkInGridCell();
 | 
									MyStepRTB.Rtf = MyStepRTB.DoNewLinkInGridCell();
 | 
				
			||||||
 | 
									DoNotRefresh = false;
 | 
				
			||||||
				MyFlexGrid.Row = row;
 | 
									MyFlexGrid.Row = row;
 | 
				
			||||||
				MyFlexGrid.Col = col;
 | 
									MyFlexGrid.Col = col;
 | 
				
			||||||
				MyFlexGrid[MyFlexGrid.Row, MyFlexGrid.Col] = MyStepRTB.Rtf;
 | 
									MyFlexGrid[MyFlexGrid.Row, MyFlexGrid.Col] = MyStepRTB.Rtf;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								if (!MyFlexGrid.IsDirty) return;
 | 
				
			||||||
			SaveContents();
 | 
								SaveContents();
 | 
				
			||||||
 | 
								IsSaving = false;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		#endregion
 | 
							#endregion
 | 
				
			||||||
		#region Miscellaneous Support
 | 
							#region Miscellaneous Support
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2876,10 +2876,14 @@ namespace Volian.Controls.Library
 | 
				
			|||||||
					{
 | 
										{
 | 
				
			||||||
						rousg = itm.MyContent.ContentRoUsages.Add(roparts[1], rodb);
 | 
											rousg = itm.MyContent.ContentRoUsages.Add(roparts[1], rodb);
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
										//get temporary rousageid
 | 
				
			||||||
					oldid = rousg.ROUsageID;
 | 
										oldid = rousg.ROUsageID;
 | 
				
			||||||
					Rtf = Rtf.Replace("<NewID>", string.Format("<CROUSGID={0}>", rousg.ROUsageID));
 | 
										Rtf = Rtf.Replace("<NewID>", string.Format("<CROUSGID={0}>", rousg.ROUsageID));
 | 
				
			||||||
 | 
										//save temporary rousageid to get real rousageid
 | 
				
			||||||
					itm.Save();
 | 
										itm.Save();
 | 
				
			||||||
 | 
										//replace temprorary rousageid with real rousageid
 | 
				
			||||||
					Rtf = Rtf.Replace(string.Format("<CROUSGID={0}>", oldid), rousg.ROUsageID.ToString());
 | 
										Rtf = Rtf.Replace(string.Format("<CROUSGID={0}>", oldid), rousg.ROUsageID.ToString());
 | 
				
			||||||
 | 
										//save real rousageid
 | 
				
			||||||
					itm.Save();
 | 
										itm.Save();
 | 
				
			||||||
					MyItemInfo.MyContent.RefreshContentRoUsages();
 | 
										MyItemInfo.MyContent.RefreshContentRoUsages();
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,160 @@ namespace Volian.Controls.Library
 | 
				
			|||||||
		  get { return _SpellChecker; }
 | 
							  get { return _SpellChecker; }
 | 
				
			||||||
		  set { _SpellChecker = value; }
 | 
							  set { _SpellChecker = value; }
 | 
				
			||||||
	  }
 | 
						  }
 | 
				
			||||||
 | 
							//public string GridStackTrace
 | 
				
			||||||
	  public static GridCopyInfo MyCopyInfo = new GridCopyInfo();
 | 
							//{
 | 
				
			||||||
 | 
							//  get
 | 
				
			||||||
 | 
							//  {
 | 
				
			||||||
 | 
							//    string st = Volian.Base.Library.vlnStackTrace.GetStack();
 | 
				
			||||||
 | 
							//    st = StripFunnyCharacters(st);
 | 
				
			||||||
 | 
							//    return st;
 | 
				
			||||||
 | 
							//    Console.WriteLine(st);
 | 
				
			||||||
 | 
							//    return st.Replace(@"\","|");
 | 
				
			||||||
 | 
							//  }
 | 
				
			||||||
 | 
							//  set
 | 
				
			||||||
 | 
							//  {
 | 
				
			||||||
 | 
							//    ;
 | 
				
			||||||
 | 
							//  }
 | 
				
			||||||
 | 
							//}
 | 
				
			||||||
 | 
							//private string StripFunnyCharacters(string st)
 | 
				
			||||||
 | 
							//{
 | 
				
			||||||
 | 
							//  StringBuilder sb = new StringBuilder();
 | 
				
			||||||
 | 
							//  foreach (char c in st)
 | 
				
			||||||
 | 
							//  {
 | 
				
			||||||
 | 
							//    if ((c < ' ' || c > 255) && !"\r\n\t".Contains(c.ToString()))
 | 
				
			||||||
 | 
							//      sb.Append(string.Format("x{0:X4}", (int)c));
 | 
				
			||||||
 | 
							//    else
 | 
				
			||||||
 | 
							//      sb.Append(c);
 | 
				
			||||||
 | 
							//  }
 | 
				
			||||||
 | 
							//  return sb.ToString();
 | 
				
			||||||
 | 
							//}
 | 
				
			||||||
 | 
							public bool IsDirty
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								get
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									return IsGridChanged(this._MyItemInfo.MyContent.MyGrid.Data, this.GetXMLData());
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private bool IsGridChanged(string oldXml, string newXml)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (this.TableCellEditor.Text.Contains("<NewID>"))
 | 
				
			||||||
 | 
									return false;
 | 
				
			||||||
 | 
								XmlDocument XdOld = new XmlDocument();
 | 
				
			||||||
 | 
								XdOld.LoadXml(oldXml);
 | 
				
			||||||
 | 
								XmlDocument XdNew = new XmlDocument();
 | 
				
			||||||
 | 
								XdNew.LoadXml(newXml);
 | 
				
			||||||
 | 
								//check volian borders 1st
 | 
				
			||||||
 | 
								if (XdNew.SelectSingleNode("C1FlexGrid/Control/MyBorderDetailString").InnerText != XdOld.SelectSingleNode("C1FlexGrid/Control/MyBorderDetailString").InnerText)
 | 
				
			||||||
 | 
									return true;
 | 
				
			||||||
 | 
								//check row/col sizes 2nd
 | 
				
			||||||
 | 
								if (GetRowColSizeString(XdNew) != GetRowColSizeString(XdOld))
 | 
				
			||||||
 | 
									return true;
 | 
				
			||||||
 | 
								//check for cell data changes 3rd
 | 
				
			||||||
 | 
								if (GetCellDataString(XdNew) != GetCellDataString(XdOld))
 | 
				
			||||||
 | 
									return true;
 | 
				
			||||||
 | 
								//check for cell format changes 4th
 | 
				
			||||||
 | 
								if (GetCellFormatString(XdNew) != GetCellFormatString(XdOld))
 | 
				
			||||||
 | 
									return true;
 | 
				
			||||||
 | 
								//check for merged cells 5th
 | 
				
			||||||
 | 
								if (GetCellMergeString(XdNew) != GetCellMergeString(XdOld))
 | 
				
			||||||
 | 
									return true;
 | 
				
			||||||
 | 
								return false;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string GetRowColSizeString(XmlDocument xd)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								string defCW = xd.SelectSingleNode("C1FlexGrid/ColumnInfo/DefaultSize").InnerText;
 | 
				
			||||||
 | 
								string defRH = xd.SelectSingleNode("C1FlexGrid/RowInfo/DefaultSize").InnerText;
 | 
				
			||||||
 | 
								int cols = int.Parse(xd.SelectSingleNode("C1FlexGrid/ColumnInfo/Count").InnerText);
 | 
				
			||||||
 | 
								int rows = int.Parse(xd.SelectSingleNode("C1FlexGrid/RowInfo/Count").InnerText);
 | 
				
			||||||
 | 
								List<string> rh = new List<string>();
 | 
				
			||||||
 | 
								for (int i = 0; i < rows; i++)
 | 
				
			||||||
 | 
									rh.Add(defRH);
 | 
				
			||||||
 | 
								List<string> cw = new List<string>();
 | 
				
			||||||
 | 
								for (int i = 0; i < cols; i++)
 | 
				
			||||||
 | 
									cw.Add(defCW);
 | 
				
			||||||
 | 
								XmlNodeList nlr = xd.SelectNodes("C1FlexGrid/Rows/Row");
 | 
				
			||||||
 | 
								foreach (XmlNode nr in nlr)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									int idx = int.Parse(nr.Attributes.GetNamedItem("index").InnerText);
 | 
				
			||||||
 | 
									rh[idx] = nr.SelectSingleNode("Height").InnerText;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								XmlNodeList nlc = xd.SelectNodes("C1FlexGrid/Columns/Column");
 | 
				
			||||||
 | 
								foreach (XmlNode nc in nlc)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									int idx = int.Parse(nc.Attributes.GetNamedItem("index").InnerText);
 | 
				
			||||||
 | 
									cw[idx] = nc.SelectSingleNode("Width").InnerText;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								string rhcw = "RowHeights:  ";
 | 
				
			||||||
 | 
								string sep = string.Empty;
 | 
				
			||||||
 | 
								foreach (string s in rh)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									rhcw += sep + s;
 | 
				
			||||||
 | 
									sep = ",";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								rhcw += " - ColWidths:  ";
 | 
				
			||||||
 | 
								sep = string.Empty;
 | 
				
			||||||
 | 
								foreach (string s in cw)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									rhcw += sep + s;
 | 
				
			||||||
 | 
									sep = ",";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return rhcw;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string GetCellDataString(XmlDocument xd)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								int cols = int.Parse(xd.SelectSingleNode("C1FlexGrid/ColumnInfo/Count").InnerText);
 | 
				
			||||||
 | 
								int rows = int.Parse(xd.SelectSingleNode("C1FlexGrid/RowInfo/Count").InnerText);
 | 
				
			||||||
 | 
								List<string> datum = new List<string>();
 | 
				
			||||||
 | 
								for (int i = 0; i < rows * cols; i++)
 | 
				
			||||||
 | 
									datum.Add("|");
 | 
				
			||||||
 | 
								XmlNodeList nl = xd.SelectNodes("C1FlexGrid/Cells/Cell/Data");
 | 
				
			||||||
 | 
								string data = string.Empty;
 | 
				
			||||||
 | 
								foreach (XmlNode xn in nl)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									RichTextBox rtb = new RichTextBox();
 | 
				
			||||||
 | 
									rtb.Rtf = xn.InnerText;
 | 
				
			||||||
 | 
									XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute;
 | 
				
			||||||
 | 
									string[] rc = xa.InnerText.Split(',');
 | 
				
			||||||
 | 
									int r = int.Parse(rc[0]);
 | 
				
			||||||
 | 
									int c = int.Parse(rc[1]);
 | 
				
			||||||
 | 
									int index = r * cols + c;
 | 
				
			||||||
 | 
									datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Text);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								foreach (string s in datum)
 | 
				
			||||||
 | 
									data += s;
 | 
				
			||||||
 | 
								return data;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string GetCellFormatString(XmlDocument xd)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								int cols = int.Parse(xd.SelectSingleNode("C1FlexGrid/ColumnInfo/Count").InnerText);
 | 
				
			||||||
 | 
								int rows = int.Parse(xd.SelectSingleNode("C1FlexGrid/RowInfo/Count").InnerText);
 | 
				
			||||||
 | 
								List<string> datum = new List<string>();
 | 
				
			||||||
 | 
								for (int i = 0; i < rows * cols; i++)
 | 
				
			||||||
 | 
									datum.Add("|");
 | 
				
			||||||
 | 
								XmlNodeList nl = xd.SelectNodes("C1FlexGrid/Cells/Cell/Data");
 | 
				
			||||||
 | 
								string data = string.Empty;
 | 
				
			||||||
 | 
								foreach (XmlNode xn in nl)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									RichTextBox rtb = new RichTextBox();
 | 
				
			||||||
 | 
									rtb.Rtf = xn.InnerText;
 | 
				
			||||||
 | 
									XmlAttribute xa = xn.ParentNode.Attributes.GetNamedItem("index") as XmlAttribute;
 | 
				
			||||||
 | 
									string[] rc = xa.InnerText.Split(',');
 | 
				
			||||||
 | 
									int r = int.Parse(rc[0]);
 | 
				
			||||||
 | 
									int c = int.Parse(rc[1]);
 | 
				
			||||||
 | 
									int index = r * cols + c;
 | 
				
			||||||
 | 
									datum[index] = "|" + (rtb.Text == "" ? "" : rtb.Rtf);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								foreach (string s in datum)
 | 
				
			||||||
 | 
									data += s;
 | 
				
			||||||
 | 
								return data;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							private string GetCellMergeString(XmlDocument xd)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if(xd.SelectSingleNode("C1FlexGrid/MergedRanges") == null)
 | 
				
			||||||
 | 
									return string.Empty;
 | 
				
			||||||
 | 
								return xd.SelectSingleNode("C1FlexGrid/MergedRanges").InnerXml;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							public static GridCopyInfo MyCopyInfo = new GridCopyInfo();
 | 
				
			||||||
	  private Color _DefaultCellBackgroundcolor;
 | 
						  private Color _DefaultCellBackgroundcolor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  public Color DefaultCellBackgroundcolor
 | 
						  public Color DefaultCellBackgroundcolor
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user