diff --git a/PROMS/Volian.Controls.Library/StepRTB.cs b/PROMS/Volian.Controls.Library/StepRTB.cs index da33fbd8..306286d6 100644 --- a/PROMS/Volian.Controls.Library/StepRTB.cs +++ b/PROMS/Volian.Controls.Library/StepRTB.cs @@ -1816,57 +1816,84 @@ namespace Volian.Controls.Library if (e.Control) { IsControlChar = true; - switch (e.KeyCode) + if (e.Shift) { - case Keys.X: //ctrl-X - case Keys.C: //ctrl-C - // handle the clipboard copy and cut when a Transition or RO is selected - // For now, we are coping/cutting just the displayed text to the clipboard (like 16-bit VE-PROMS) - string ts = GetSelectedDisplayableText(); - if (ts != null && ts != "") Clipboard.SetText(GetSelectedDisplayableText()); - e.Handled = true; - e.SuppressKeyPress = true; - if (ts != null && ts != "" && e.KeyCode == Keys.X) // cut to clipboard - delete the selected text - HandleDeleteKeyWithSelectedText(e, null); - break; - case Keys.V: - // NOTE that if in a Properties Dialog StepRTB (for numbers and titles) or in a Procedure Specific - // Information (PSI) Dialog, i.e. any non-EditItem/Step editor field, the following code is run - // for the ctrl-V. For EditItems & Grid cells, the code in StepTabRibbon's btnPaste_Click is - // run. The way this occurs is that in the designer for StepTabRibbon (StepTabRibbon.designer.cs), - // the line of code: - // this.btnPaste.Shortcuts.Add(DevComponents.DotNetBar.eShortcut.CtrlV); - // maps the Ctrl-V to btnPaste for those StepRTB's that are associated with the StepTabRibbon, i.e. - // EditItems & Grid cells. - IDataObject iData = Clipboard.GetDataObject(); - if (!iData.GetDataPresent(DataFormats.Text) && !iData.GetDataPresent(DataFormats.Rtf)) - { - MessageBox.Show("Cannot paste, text has special characters or symbols that will not paste correctly."); - } - else - { - // if contains bad rtf (from Word), paste as text, otherwise, do the paste here. - if (!PasteRtfAsText(true)) Paste(); - if (SelectionLength == 0) SelectionFont = MyStyleFont.WindowsFont; - } - e.Handled = true; - return; - case Keys.Home: - StepRTB_HomeEndPressed(e); - e.Handled = true; - break; - case Keys.End: - StepRTB_HomeEndPressed(e); - e.Handled = true; - break; - // 16bit Proms used 'ctrl-enter' for Hard returns. 32bit Proms uses 'shift-enter' - // because the richtextbox does this by default. Also Word uses 'shift-enter' - // for Hard return. And Word uses 'ctrl-enter' for inserting of page break. So - // 'ctrl-enter' for 32bit will insert page break - case Keys.Enter: - OnInsertPgBrk(this, new EventArgs()); - e.Handled = true; - break; + switch (e.KeyCode) + { + // The following keys are supported in underlying RTB (with ctrl+shift key), + // but PROMS should not do anything for that functionality: + case Keys.Add: + case Keys.Subtract: + case Keys.L: + e.Handled = true; + break; + } + } + else + { + switch (e.KeyCode) + { + case Keys.X: //ctrl-X + case Keys.C: //ctrl-C + // handle the clipboard copy and cut when a Transition or RO is selected + // For now, we are coping/cutting just the displayed text to the clipboard (like 16-bit VE-PROMS) + string ts = GetSelectedDisplayableText(); + if (ts != null && ts != "") Clipboard.SetText(GetSelectedDisplayableText()); + e.Handled = true; + e.SuppressKeyPress = true; + if (ts != null && ts != "" && e.KeyCode == Keys.X) // cut to clipboard - delete the selected text + HandleDeleteKeyWithSelectedText(e, null); + break; + case Keys.V: + // NOTE that if in a Properties Dialog StepRTB (for numbers and titles) or in a Procedure Specific + // Information (PSI) Dialog, i.e. any non-EditItem/Step editor field, the following code is run + // for the ctrl-V. For EditItems & Grid cells, the code in StepTabRibbon's btnPaste_Click is + // run. The way this occurs is that in the designer for StepTabRibbon (StepTabRibbon.designer.cs), + // the line of code: + // this.btnPaste.Shortcuts.Add(DevComponents.DotNetBar.eShortcut.CtrlV); + // maps the Ctrl-V to btnPaste for those StepRTB's that are associated with the StepTabRibbon, i.e. + // EditItems & Grid cells. + IDataObject iData = Clipboard.GetDataObject(); + if (!iData.GetDataPresent(DataFormats.Text) && !iData.GetDataPresent(DataFormats.Rtf)) + { + MessageBox.Show("Cannot paste, text has special characters or symbols that will not paste correctly."); + } + else + { + // if contains bad rtf (from Word), paste as text, otherwise, do the paste here. + if (!PasteRtfAsText(true)) Paste(); + if (SelectionLength == 0) SelectionFont = MyStyleFont.WindowsFont; + } + e.Handled = true; + return; + case Keys.Home: + StepRTB_HomeEndPressed(e); + e.Handled = true; + break; + case Keys.End: + StepRTB_HomeEndPressed(e); + e.Handled = true; + break; + // 16bit Proms used 'ctrl-enter' for Hard returns. 32bit Proms uses 'shift-enter' + // because the richtextbox does this by default. Also Word uses 'shift-enter' + // for Hard return. And Word uses 'ctrl-enter' for inserting of page break. So + // 'ctrl-enter' for 32bit will insert page break + case Keys.Enter: + OnInsertPgBrk(this, new EventArgs()); + e.Handled = true; + break; + // The following keys are supported in underlying RTB (with ctrl key), but PROMS should not + // do anything for that functionality: + case Keys.R: // Right Align text + case Keys.L: // Left Align text + case Keys.E: // Center Align text + case Keys.D1: // Single space text (D1 is the '1' key) + case Keys.D2: // Double space text + case Keys.D5: // 1.5 space text + case Keys.H: // Find (proms uses Ctrl+F for find) + e.Handled = true; + break; + } } } if (((int)e.KeyCode) == 220) e.Handled = true; diff --git a/PROMS/Volian.Print.Library/Grid2Pdf.cs b/PROMS/Volian.Print.Library/Grid2Pdf.cs index d3ed50a2..39468a75 100644 --- a/PROMS/Volian.Print.Library/Grid2Pdf.cs +++ b/PROMS/Volian.Print.Library/Grid2Pdf.cs @@ -292,7 +292,14 @@ namespace Volian.Print.Library _StatRTB.Width = (int)w; _StatRTB.Font = MyFlexGrid.Font; if (str.StartsWith(@"{\rtf")) - _StatRTB.Rtf = str.Replace(@"\~", @"\u160?"); + // The 'Replace(@" \ulnone", @"\u160?\ulnone")' was added so that data in VEWCN SUR_WTC + // tables would print. There were a number of tables, for example in STN NB-106/8.1.6, + // that had a series of spaces underlined and these spaces were not underlined in the + // generated pdf. It seems that there is a problem somewhere in the rtb -> itextsharp + // level. This fixed the immediate problem. If there is 'b0' (bold off) after the + // space before the 'ulnone' the following won't work. Also, this change was not + // made in the non-table code. If the problem occurs there, it should be added. + _StatRTB.Rtf = str.Replace(@"\~", @"\u160?").Replace(@" \ulnone", @"\u160?\ulnone"); else _StatRTB.Text = str; _StatRTB.SelectAll();