Пример #1
0
        public string TabTableToHTML(string text, bool firstLineHeader, bool addTable)
        {
            var sbHtml = new StringBuilder();

            if (addTable)
            {
                sbHtml.Append(TableOpen);
            }

            var lineNo = 0;

            foreach (var line in text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries))
            {
                lineNo++;
                if (lineNo == 1 && firstLineHeader)
                {
                    sbHtml.Append(TROpenAlt);
                    foreach (var column in line.Split(new[] { '\t' }, StringSplitOptions.None))
                    {
                        sbHtml.Append(HTMLStyle.AddTd(TH, column));
                    }
                    sbHtml.AppendLine(TRClose);
                }
                else
                {
                    sbHtml.Append(TROpen);
                    foreach (var column in line.Split(new[] { '\t' }, StringSplitOptions.None))
                    {
                        sbHtml.Append(HTMLStyle.AddTd(TD, column));
                    }
                    sbHtml.AppendLine(TRClose);
                }
            }
            if (addTable)
            {
                sbHtml.Append(TableClose);
            }
            return(sbHtml.ToString());
        }
Пример #2
0
        /// <summary>
        ///   Raises the <see cref="KeyDown" /> event.
        /// </summary>
        /// <param name="e">
        ///   A <see cref="KeyEventArgs" /> that contains the event data.
        /// </param>
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            // Handle CRTL -A
            if (e.Control && e.KeyCode == Keys.A)
            {
                SelectedTreeNode.Clear();
                foreach (TreeNode item in Nodes)
                {
                    AddNodeWithSubnodes(item);
                }

                PaintSelectedNodes();
                // SelectedTreeNode = this.Nodes;
            }

            // Handle CRTL -C
            if (!e.Control || e.KeyCode != Keys.C)
            {
                return;
            }
            {
                if (SelectedTreeNode.Count == 0)
                {
                    return;
                }

                var minLevel = int.MaxValue;
                var maxLevel = int.MinValue;
                foreach (var item in SelectedTreeNode)
                {
                    if (minLevel > item.Level)
                    {
                        minLevel = item.Level;
                    }

                    if (maxLevel < item.Level)
                    {
                        maxLevel = item.Level;
                    }
                }

                var buffer = new StringBuilder();
                var sbHtml = new StringBuilder();
                var style  = ApplicationSetting.HTMLStyle;

                sbHtml.AppendLine(style.TableOpen);
                foreach (var item in SelectedTreeNode.OrderBy(x => x.FullPath))
                {
                    var text = item.Text;
                    sbHtml.Append(style.TROpen);
                    if (item.Tag is FormHierachyDisplay.TreeData data)
                    {
                        text = data.Title;
                        if (!string.IsNullOrEmpty(data.Tag))
                        {
                            sbHtml.Append(HTMLStyle.AddTd("<td>{0}</td>", data.Tag));
                            if (text.StartsWith(data.Tag, StringComparison.Ordinal))
                            {
                                text = text.Substring(data.Tag.Length).TrimStart(' ', '-');
                            }
                        }
                        else
                        {
                            sbHtml.Append(style.TDEmpty);
                        }
                    }

                    for (var level = minLevel; level <= maxLevel; level++)
                    {
                        buffer.Append("\t");
                        if (level < item.Level)
                        {
                            sbHtml.Append(style.TDEmpty);
                        }
                        if (level != item.Level)
                        {
                            continue;
                        }
                        sbHtml.Append(HTMLStyle.AddTd("<td colspan='{0}'>{1}</td>", (maxLevel - level + 1).ToString(System.Globalization.CultureInfo.InvariantCulture), text));
                        buffer.Append(item.Text);
                    }

                    sbHtml.AppendLine(style.TRClose);
                    buffer.AppendLine();
                }

                sbHtml.AppendLine(style.TableClose);

                var dataObject = new DataObject();
                dataObject.SetData(DataFormats.Html, true, style.ConvertToHtmlFragment(sbHtml.ToString()));
                dataObject.SetData(DataFormats.Text, true, buffer.ToString());

                Clipboard.Clear();
                Clipboard.SetDataObject(dataObject, false, 5, 200);
            }
        }
        public string SelectedToClipboard()
        {
            if (SelectedTreeNode.Count == 0)
            {
                return(string.Empty);
            }

            var minLevel = int.MaxValue;
            var maxLevel = int.MinValue;

            foreach (var item in SelectedTreeNode)
            {
                if (minLevel > item.Level)
                {
                    minLevel = item.Level;
                }

                if (maxLevel < item.Level)
                {
                    maxLevel = item.Level;
                }
            }

            var buffer = new StringBuilder();
            var sbHtml = new StringBuilder();

            sbHtml.AppendLine(HTMLStyle.TableOpen);
            // Should follow display of nodes...
            foreach (var item in SelectedTreeNode)
            {
                var text = item.Text;

                sbHtml.Append(HTMLStyle.TROpen);
                // TreeData Tag is teh first column
                if (item.Tag is FormHierarchyDisplay.TreeData data)
                {
                    text = data.Title;
                    if (!string.IsNullOrEmpty(data.Tag))
                    {
                        sbHtml.Append(HTMLStyle.AddTd("<td>{0}</td>", data.Tag));
                        buffer.Append(data.Tag);
                        buffer.Append("\t");
                        if (text.StartsWith(data.Tag, StringComparison.Ordinal))
                        {
                            text = text.Substring(data.Tag.Length).TrimStart(' ', '-');
                        }
                    }
                    else
                    {
                        sbHtml.Append(HTMLStyle.TDEmpty);
                    }
                }
                // Depending on Level add columns
                for (var level = minLevel; level < item.Level; level++)
                {
                    buffer.Append("\t");
                    sbHtml.Append(HTMLStyle.TDEmpty);
                }

                sbHtml.Append(
                    HTMLStyle.AddTd(
                        "<td colspan='{0}'>{1}</td>",
                        ((maxLevel - item.Level) + 1).ToString(CultureInfo.InvariantCulture),
                        text));
                buffer.Append(text);
                for (var level = item.Level + 1; level < maxLevel; level++)
                {
                    buffer.Append("\t");
                }
                // TreeData Children Count is the last column
                if (item.Tag is FormHierarchyDisplay.TreeData data2)
                {
                    sbHtml.Append(HTMLStyle.AddTd("<td>{0}</td>", data2.Children.Count));
                    buffer.Append(data2.Children.Count);
                }
                sbHtml.AppendLine(HTMLStyle.TRClose);
                buffer.AppendLine();
            }

            sbHtml.AppendLine(HTMLStyle.TableClose);

            var dataObject = new DataObject();

            dataObject.SetData(DataFormats.Html, true, HTMLStyle.ConvertToHtmlFragment(sbHtml.ToString()));
            dataObject.SetData(DataFormats.Text, true, buffer.ToString());

            Clipboard.Clear();
            Clipboard.SetDataObject(dataObject, false, 5, 200);

            return(buffer.ToString());
        }
Пример #4
0
        /// <summary>
        ///   Copies the selected cells into the clipboard.
        /// </summary>
        /// <param name="addErrorInfo">if set to <c>true</c> [add error information].</param>
        /// <param name="cutLength">if set to <c>true</c> [cut length].</param>
        /// <param name="alternatingRows">if set to <c>true</c> [alternating rows].</param>
        /// <param name="columns">The columns.</param>
        /// <param name="rows">The rows.</param>
        /// <param name="selectedCells">The selected cells.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        private void CopySelectedCellsIntoClipboard(
            bool addErrorInfo,
            bool cutLength,
            bool alternatingRows,
            [NotNull] DataGridViewColumnCollection columns,
            [NotNull] DataGridViewRowCollection rows,
            [NotNull] DataGridViewSelectedCellCollection selectedCells,
            CancellationToken cancellationToken)
        {
            var buffer     = new StringBuilder();
            var dataObject = new DataObject();

            // If there are multiple cells Add a header and a neat HTML table
            var sbHtml = new StringBuilder(m_HtmlStyle.TableOpen);

            var leftCol   = int.MaxValue;
            var rightCol  = int.MinValue;
            var topRow    = int.MaxValue;
            var bottomRow = int.MinValue;

            foreach (DataGridViewCell cell in selectedCells)
            {
                if (cell.OwningColumn.DisplayIndex < leftCol)
                {
                    leftCol = cell.OwningColumn.DisplayIndex;
                }
                if (cell.OwningColumn.DisplayIndex > rightCol)
                {
                    rightCol = cell.OwningColumn.DisplayIndex;
                }
                if (cell.RowIndex < topRow)
                {
                    topRow = cell.RowIndex;
                }
                if (cell.RowIndex > bottomRow)
                {
                    bottomRow = cell.RowIndex;
                }
            }

            var hasRowError    = HasRowErrors(topRow, bottomRow + 1, rows);
            var visibleColumns = new List <int>();

            sbHtml.Append(m_HtmlStyle.TROpenAlt);
            for (var col = leftCol; col <= rightCol; col++)
            {
                foreach (DataGridViewColumn diplayCol in columns)
                {
                    if (diplayCol.DisplayIndex == col && diplayCol.Visible && diplayCol.HeaderText != ReaderConstants.cErrorField)
                    {
                        visibleColumns.Add(col);
                        sbHtml.Append(HTMLStyle.AddTd(m_HtmlStyle.TH, diplayCol.HeaderText));
                        if (buffer.Length > 0)
                        {
                            buffer.Append('\t');
                        }

                        buffer.Append(EscapeTab(diplayCol.HeaderText));
                        break;
                    }
                }
            }

            if (hasRowError && addErrorInfo)
            {
                sbHtml.Append(HTMLStyle.AddTd(m_HtmlStyle.TH, c_ErrorInfo));
                buffer.Append('\t');
                buffer.Append(c_ErrorInfo);
            }

            sbHtml.AppendLine(m_HtmlStyle.TRClose);
            buffer.AppendLine();

            var trAlternate = false;
            var lastRefresh = DateTime.Now;

            for (var row = topRow; row <= bottomRow; row++)
            {
                if (rows[row].IsNewRow)
                {
                    continue;
                }
                if (cancellationToken.IsCancellationRequested)
                {
                    return;
                }
                sbHtml.Append(trAlternate ? m_HtmlStyle.TROpenAlt : m_HtmlStyle.TROpen);
                if (alternatingRows)
                {
                    trAlternate = !trAlternate;
                }
                var written = false;
                if (cancellationToken.IsCancellationRequested)
                {
                    return;
                }
                for (var col = leftCol; col <= rightCol; col++)
                {
                    if (!visibleColumns.Contains(col))
                    {
                        continue;
                    }
                    foreach (DataGridViewCell cell in selectedCells)
                    {
                        if (cell.RowIndex != row)
                        {
                            continue;
                        }
                        if (cell.OwningColumn.DisplayIndex != col)
                        {
                            continue;
                        }
                        AddCell(cell, buffer, sbHtml, col > leftCol, addErrorInfo, cutLength, m_HtmlStyle);
                        written = true;
                        break;
                    }

                    if (written)
                    {
                        continue;
                    }
                    buffer.Append('\t');
                    sbHtml.Append(m_HtmlStyle.TDEmpty);
                }

                AppendRowError(buffer, sbHtml, rows[row].ErrorText, addErrorInfo && hasRowError, m_HtmlStyle);

                sbHtml.AppendLine(m_HtmlStyle.TRClose);
                buffer.AppendLine();
                if (!((DateTime.Now - lastRefresh).TotalSeconds > 0.2))
                {
                    continue;
                }
                lastRefresh = DateTime.Now;
                Extensions.ProcessUIElements();
            }

            sbHtml.AppendLine(m_HtmlStyle.TableClose);
            dataObject.SetData(DataFormats.Html, true, m_HtmlStyle.ConvertToHtmlFragment(sbHtml.ToString()));
            dataObject.SetData(DataFormats.Text, true, buffer.ToString());
            dataObject.SetClipboard();
        }
Пример #5
0
        /// <summary>
        ///   Copies all cells to the clipboard
        /// </summary>
        /// <param name="addErrorInfo">if set to <c>true</c> [add error information].</param>
        /// <param name="cutLength">if set to <c>true</c> [cut length].</param>
        /// <param name="alternatingRows">if set to <c>true</c> [alternating rows].</param>
        /// <param name="columns">The columns.</param>
        /// <param name="rows">The rows.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        private void CopyAllCellsIntoClipboard(
            bool addErrorInfo,
            bool cutLength,
            bool alternatingRows,
            [NotNull] DataGridViewColumnCollection columns,
            [NotNull] DataGridViewRowCollection rows,
            CancellationToken cancellationToken)
        {
            var buffer = new StringBuilder();
            var sbHtml = new StringBuilder(m_HtmlStyle.TableOpen);

            sbHtml.Append(m_HtmlStyle.TROpenAlt);
            var first = true;

            var visibleColumns = new SortedDictionary <int, DataGridViewColumn>();

            foreach (DataGridViewColumn c in columns)
            {
                // Do not include the error field it will be retrieved from the error collection with nice coloring
                if (c.Visible && c.HeaderText != ReaderConstants.cErrorField)
                {
                    visibleColumns.Add(c.DisplayIndex, c);
                }
            }
            var hasRowError = HasRowErrors(0, rows.Count, rows);

            foreach (var col in visibleColumns.Values)
            {
                var headerText = col.HeaderText;
                sbHtml.Append(HTMLStyle.AddTd(m_HtmlStyle.TH, headerText));
                if (!first)
                {
                    buffer.Append('\t');
                }
                else
                {
                    first = false;
                }

                buffer.Append(EscapeTab(headerText));
            }

            if (hasRowError && addErrorInfo)
            {
                sbHtml.Append(HTMLStyle.AddTd(m_HtmlStyle.TH, c_ErrorInfo));
                buffer.Append('\t');
                buffer.Append(c_ErrorInfo);
            }

            sbHtml.AppendLine(m_HtmlStyle.TRClose);
            buffer.AppendLine();

            var trAlternate = false;
            var lastRefresh = DateTime.Now;

            for (var row = 0; row < rows.Count; row++)
            {
                if (rows[row].IsNewRow)
                {
                    break;
                }
                sbHtml.Append(trAlternate ? m_HtmlStyle.TROpenAlt : m_HtmlStyle.TROpen);
                if (alternatingRows)
                {
                    trAlternate = !trAlternate;
                }
                first = true;
                foreach (var col in visibleColumns.Values)
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }
                    var cell = rows[row].Cells[col.Index];
                    AddCell(cell, buffer, sbHtml, !first, addErrorInfo, cutLength, m_HtmlStyle);
                    first = false;
                }

                AppendRowError(buffer, sbHtml, rows[row].ErrorText, addErrorInfo && hasRowError, m_HtmlStyle);
                sbHtml.AppendLine(m_HtmlStyle.TRClose);
                buffer.AppendLine();
                if (!((DateTime.Now - lastRefresh).TotalSeconds > 0.2))
                {
                    continue;
                }
                lastRefresh = DateTime.Now;
                Extensions.ProcessUIElements();
            }

            sbHtml.AppendLine(m_HtmlStyle.TableClose);

            var dataObject = new DataObject();

            dataObject.SetData(DataFormats.Html, true, m_HtmlStyle.ConvertToHtmlFragment(sbHtml.ToString()));
            dataObject.SetData(DataFormats.Text, true, buffer.ToString());
            dataObject.SetClipboard();
        }