diff --git a/PROMS/Volian.Controls.Library/VlnFlexGrid.cs b/PROMS/Volian.Controls.Library/VlnFlexGrid.cs index 6dbea674..7ab891f9 100644 --- a/PROMS/Volian.Controls.Library/VlnFlexGrid.cs +++ b/PROMS/Volian.Controls.Library/VlnFlexGrid.cs @@ -13,6 +13,7 @@ using Volian.Controls.Library; using VEPROMS.CSLA.Library; using C1.Win.C1FlexGrid; using System.Text.RegularExpressions; +using System.Xml.Serialization; namespace Volian.Controls.Library { @@ -58,7 +59,8 @@ namespace Volian.Controls.Library //private int _minSplitColWidth = 10; //private int _minSplitRowHeight = 20; private E_ViewMode _vwMode = E_ViewMode.Edit; - public E_ViewMode VwMode + [XmlIgnore] + internal E_ViewMode VwMode { get { return _vwMode; } set @@ -86,6 +88,27 @@ namespace Volian.Controls.Library get { return _ROID; } set { _ROID = value; } } + private float? _DPI = null; + public float? DPI + { + get + { + if (_DPI == null) + _DPI = 120; + return _DPI; + } + set + { + if (DPI != value) + { + _DPI = value; + } + if (value == 120) + Console.WriteLine("Test"); + if(!(TableCellEditor is StepRTB)) + Console.WriteLine("{0}",TableCellEditor.GetType().Name); + } + } #region Grid Initialize public VlnFlexGrid() @@ -152,16 +175,118 @@ namespace Volian.Controls.Library // //Rows[Row].Height += (mh - h); // ////AdjustGridControlSize(); //} - private int GetCellHeight(int row, int col) - { - int height = 0; - CellRange cr = GetMergedRange(row, col); - for (int r = cr.r1; r <= cr.r2; r++) + private int GetCellHeight(int row, int col) { - height += (Rows[r].Height == -1) ? Rows.DefaultSize -3 : Rows[r].Height - 3; + return GetRangeHeight(GetMergedRange(row, col))-3; + } + public int GetRangeHeight(CellRange cr) + { + int height = 0; + for (int r = cr.r1; r <= cr.r2; r++) + height += (Rows[r].Height == -1) ? Rows.DefaultSize : Rows[r].Height; + return height; + } + public int GetRangeTop(CellRange cr) + { + int top = 0; + for (int r = 0; r < cr.r1; r++) + top += (Rows[r].Height == -1) ? Rows.DefaultSize : Rows[r].Height; + return top; + } + public int GetRangeWidth(CellRange cr) + { + int width = 0; + for (int c = cr.c1; c <= cr.c2; c++) + width += (Cols[c].Width == -1) ? Cols.DefaultSize : Cols[c].Width; + return width; + } + public int GetRangeLeft(CellRange cr) + { + int left = 0; + for (int c = 0; c < cr.c1; c++) + left += (Cols[c].Width == -1) ? Cols.DefaultSize : Cols[c].Width; + return left; + } + public int GetRangeRowsMin(CellRange cr) + { + int rowsMin = 1 + cr.r2 - cr.r1; + for (int c = cr.c1; c <= cr.c2; c++) + { + int rows = 0; + for (int r = cr.r1; r <= cr.r2; r++) + { + CellRange chk = GetMergedRange(r, c); + if (chk.r1 == r && chk.c1 == c) + rows++; + } + rowsMin = Math.Min(rowsMin, rows); + } + return rowsMin; + } + public int GetRangeRowsMax(CellRange cr) + { + int rowsMax = 0; + for (int c = cr.c1; c <= cr.c2; c++) + { + int rows = 0; + for (int r = cr.r1; r <= cr.r2; r++) + { + CellRange chk = GetMergedRange(r, c); + if (chk.r1 == r && chk.c1 == c) + rows++; + } + rowsMax = Math.Max(rowsMax, rows); + } + return rowsMax; + } + public int GetRangeColsMin(CellRange cr) + { + int colsMin = 1 + cr.c2 - cr.c1; + for (int r = cr.r1; r <= cr.r2; r++) + { + int cols = 0; + for (int c = cr.c1; c <= cr.c2; c++) + { + CellRange chk = GetMergedRange(r, c); + if (chk.r1 == r && chk.c1 == c) + cols++; + } + colsMin = Math.Min(colsMin, cols); + } + return colsMin; + } + public int GetRangeColsMax(CellRange cr) + { + int colsMax = 0; + for (int c = cr.c1; c <= cr.c2; c++) + { + int cols = 0; + for (int r = cr.r1; r <= cr.r2; r++) + { + CellRange chk = GetMergedRange(r, c); + if (chk.r1 == r && chk.c1 == c) + cols++; + } + colsMax = Math.Max(colsMax, cols); + } + return colsMax; + } + public string GetRangeRowList(CellRange cr) + { + StringBuilder sb = new StringBuilder(); + string sep = ""; + for (int r = cr.r1; r <= cr.r2; r++) + { + CellRange crm = GetMergedRange(r, cr.c1); + if (crm.r1 == r) + { + sb.Append(sep + r.ToString()); + sep = "."; + } + r = crm.r2; + } + return sb.ToString(); } - return height; - } private int GetCellWidth(int row, int col) { int width = 0; @@ -444,7 +569,6 @@ namespace Volian.Controls.Library // //Console.WriteLine("LeaveEdit Style = {0}", this.GetCellRange(e.Row, e.Col).Style.Name); // this.GetCellRange(e.Row, e.Col).Style.ForeColor = Color.Black; //} - private void Grid_OwnerDrawCell(object sender, C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e) { using (RTF _rtf = new RTF()) @@ -452,11 +576,12 @@ namespace Volian.Controls.Library // use nearest solid color // (the RTF control doesn't dither, and doesn't support transparent backgrounds) Color solid = e.Graphics.GetNearestColor(e.Style.BackColor); + DPI = e.Graphics.DpiX; if (e.Style.BackColor != solid) e.Style.BackColor = solid; // check whether the cell contains RTF - string rtfText = this.GetDataDisplay(e.Row, e.Col); + string rtfText = this.GetDataDisplay(e.Row, e.Col).Replace(@"\~",@"\u160?"); if (rtfText.StartsWith(@"{\rtf")) { // it does, so draw background @@ -469,7 +594,7 @@ namespace Volian.Controls.Library _rtf.Rtf = rtfText; _rtf.ForeColor = e.Style.ForeColor; _rtf.BackColor = e.Style.BackColor; - _rtf.Render(e.Graphics, e.Bounds); + _rtf.Render(e.Graphics, new Rectangle(e.Bounds.X+1,e.Bounds.Y,e.Bounds.Width-3,e.Bounds.Height)); //CellRange cr = GetCellRange(e.Row, e.Col); //Console.WriteLine("ownerDraw UserData [{0},{1}] = {2}", cr.r1, cr.c1, _rtf.ContentsRectangle.Height); //cr.UserData = _rtf.ContentsRectangle.Height; @@ -2889,6 +3014,11 @@ namespace Volian.Controls.Library public void MakeSelectionEven(int r1,int c1, int r2, int c2) { if (c1 < 0 || c2 < 0 || r1 < 0 || r2 < 0) return; // if there is no selection don't bother + CellRange cr = GetEvenSelection(r1, c1, r2, c2); + Select(cr); + } + public CellRange GetEvenSelection(int r1, int c1, int r2, int c2) + { int cMinNew = MinimumColumn(r1, c1); // Get the left column of the top row int cMaxNew = MaximumColumn(r1, c2); // Get the right column of the top row int rMinNew = MinimumRow(r1, c1); // Get the top row of the left column @@ -2927,7 +3057,8 @@ namespace Volian.Controls.Library } } while (cMinNew < cMin || cMaxNew > cMax || rMinNew < rMin || rMaxNew > rMax); - Select(rMinNew, cMinNew, rMaxNew, cMaxNew); + CellRange cr = GetCellRange(rMinNew, cMinNew, rMaxNew, cMaxNew); + return cr; } private int MinimumColumn(int r, int c) { @@ -3154,7 +3285,7 @@ namespace Volian.Controls.Library { string tmp = _owner[row, col].ToString(); if (tmp.StartsWith(@"{\rtf")) - Rtf = tmp; + Rtf = tmp.Replace(@"\~",@"\u160?"); else Text = tmp; }