C2023-016 – Expanded Find/Replace to search through all of the step editor sections in the same procedure. #129

Merged
djankowski merged 1 commits from C2023-016_Find-Replace-all-step-sections into Development 2023-10-06 10:13:07 -04:00
3 changed files with 90 additions and 85 deletions

View File

@ -570,7 +570,9 @@ namespace Volian.Controls.Library
/// </summary> /// </summary>
/// <param name="myItemInfo"></param> /// <param name="myItemInfo"></param>
/// <returns></returns> /// <returns></returns>
public DisplayTabItem OpenItem(ItemInfo myItemInfo2, bool setFocus) // C2023-016 Added doingFindReplace where if true Word section will not be opened - used only when doing Find/Replace
// We are not opening and searching inside Word sections, instead we just stop on the section title in the procedure editor (if a match is found in the title)
public DisplayTabItem OpenItem(ItemInfo myItemInfo2, bool setFocus, bool doingFindReplace=false)
{ {
ItemInfo myItemInfo = myItemInfo2; ItemInfo myItemInfo = myItemInfo2;
@ -649,7 +651,8 @@ namespace Volian.Controls.Library
_MyBar = GetParentBar(myItemInfo); // Get the docking bar associated with this item. _MyBar = GetParentBar(myItemInfo); // Get the docking bar associated with this item.
if (myItemInfo.MyContent.MyEntry == null) // If it is not a Word document open in step editor // C2023-016 if a Word section and doing Find/Replace don't open Word section, position to section title in step editor instead
if (myItemInfo.MyContent.MyEntry == null || doingFindReplace) // If it is not a Word document open in step editor
{ {
return OpenStepTabPage(myItemInfo, setFocus); return OpenStepTabPage(myItemInfo, setFocus);
} }

View File

@ -183,7 +183,6 @@ namespace Volian.Controls.Library
this.cmboFindText.WatermarkFont = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.cmboFindText.WatermarkFont = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.cmboFindText.WatermarkText = "Enter text to find"; this.cmboFindText.WatermarkText = "Enter text to find";
this.cmboFindText.TextChanged += new System.EventHandler(this.cmboFindText_TextChanged); this.cmboFindText.TextChanged += new System.EventHandler(this.cmboFindText_TextChanged);
this.cmboFindText.Leave += new System.EventHandler(this.cmboFindText_Leave);
// //
// labelX3 // labelX3
// //
@ -349,6 +348,7 @@ namespace Volian.Controls.Library
this.cbxReverse.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.cbxReverse.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.cbxReverse.TabIndex = 5; this.cbxReverse.TabIndex = 5;
this.cbxReverse.Text = "Reverse Find"; this.cbxReverse.Text = "Reverse Find";
this.cbxReverse.CheckedChanged += new System.EventHandler(this.cbxReverse_CheckedChanged);
// //
// cbxWholeWord // cbxWholeWord
// //
@ -363,6 +363,7 @@ namespace Volian.Controls.Library
this.cbxWholeWord.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.cbxWholeWord.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.cbxWholeWord.TabIndex = 4; this.cbxWholeWord.TabIndex = 4;
this.cbxWholeWord.Text = "Whole Word"; this.cbxWholeWord.Text = "Whole Word";
this.cbxWholeWord.CheckedChanged += new System.EventHandler(this.cbxWholeWord_CheckedChanged);
// //
// cbxCaseSensitive // cbxCaseSensitive
// //
@ -377,6 +378,7 @@ namespace Volian.Controls.Library
this.cbxCaseSensitive.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; this.cbxCaseSensitive.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
this.cbxCaseSensitive.TabIndex = 3; this.cbxCaseSensitive.TabIndex = 3;
this.cbxCaseSensitive.Text = "Case Sensitive"; this.cbxCaseSensitive.Text = "Case Sensitive";
this.cbxCaseSensitive.CheckedChanged += new System.EventHandler(this.cbxCaseSensitive_CheckedChanged);
// //
// cmbScope // cmbScope
// //

View File

@ -11,11 +11,13 @@ using JR.Utils.GUI.Forms;
namespace Volian.Controls.Library namespace Volian.Controls.Library
{ {
// C2023-016 - Upgrade - have Find/Replace spin through all of the Step Editor sections within the current procedure
public partial class FindReplace : DevComponents.DotNetBar.Office2007Form public partial class FindReplace : DevComponents.DotNetBar.Office2007Form
{ {
private bool doingfind = false; private bool doingfind = false;
private bool findingbookmarks = false; private bool findingbookmarks = false;
private bool _FoundIt = false; private bool _FoundIt = false;
private ItemInfo _StartingItemInfo = null;// C2023-016 used to remember where we started doing the Find/Replace
public bool FoundIt public bool FoundIt
{ {
get { return _FoundIt; } get { return _FoundIt; }
@ -25,7 +27,7 @@ namespace Volian.Controls.Library
{ {
get get
{ {
// B2022-067 get display text version to convert 8209 dash to nornal (keyboard) dash // B2022-067 get display text version to convert 8209 dash to normal (keyboard) dash
string selStr = ItemInfo.ConvertToDisplayText(MyEditItem.MyStepRTB.SelectedText); string selStr = ItemInfo.ConvertToDisplayText(MyEditItem.MyStepRTB.SelectedText);
if (!cbxCaseSensitive.Checked) if (!cbxCaseSensitive.Checked)
return selStr.ToUpper() == cmboFindText.Text.ToUpper(); return selStr.ToUpper() == cmboFindText.Text.ToUpper();
@ -33,7 +35,6 @@ namespace Volian.Controls.Library
return selStr == cmboFindText.Text; return selStr == cmboFindText.Text;
} }
} }
//private bool _offsetStartPos = false;
private EditItem _MyEditItem; private EditItem _MyEditItem;
public EditItem MyEditItem public EditItem MyEditItem
{ {
@ -44,25 +45,13 @@ namespace Volian.Controls.Library
if (_MyEditItem == null) return; if (_MyEditItem == null) return;
_MyDocVersion = _MyEditItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo; _MyDocVersion = _MyEditItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo;
SetupContextMenu(); SetupContextMenu();
//_offsetStartPos = false; // in a different rtf box, don't offset find position first time around
} }
} }
private DocVersionInfo _MyDocVersion; private DocVersionInfo _MyDocVersion;
public DocVersionInfo Mydocversion public DocVersionInfo Mydocversion
{ {
get { return _MyDocVersion; } get { return _MyDocVersion; }
set set {_MyDocVersion = value; }
{
_MyDocVersion = value;
//if (_MyDocVersion != null)
//{
// if (_MyDocVersion.DocVersionAssociationCount > 0)
// {
// MyROFSTLookup = _MyDocVersion.DocVersionAssociations[0].MyROFst.ROFSTLookup;
// _MyRODbID = _MyDocVersion.DocVersionAssociations[0].MyROFst.RODbID;
// }
//}
}
} }
private DisplayBookMarks _myDisplayBookMarks; private DisplayBookMarks _myDisplayBookMarks;
@ -83,17 +72,12 @@ namespace Volian.Controls.Library
{ {
InitializeComponent(); InitializeComponent();
LoadFindReplaceTextListBox(); LoadFindReplaceTextListBox();
//if (dvi != null && dvi.VersionType > 127)
// InApproved = false; // in approved
cmbScope.SelectedIndex = 0; cmbScope.SelectedIndex = 0;
btnBookMrkAll.Enabled = false; btnBookMrkAll.Enabled = false;
btnFindNext.Enabled = false; btnFindNext.Enabled = false;
btnReplace.Enabled = false; btnReplace.Enabled = false;
btnRplAll.Enabled = false; btnRplAll.Enabled = false;
//if (MyRTBItem.MyStepRTB.SelectionLength > 0)
// cmboFindText.Text = MyRTBItem.MyStepRTB.SelectedText;
cmboFindText.Focus(); cmboFindText.Focus();
//SetupContextMenu();
} }
private void LoadFindReplaceTextListBox() private void LoadFindReplaceTextListBox()
{ {
@ -113,51 +97,34 @@ namespace Volian.Controls.Library
} }
} }
//public FindReplace(RTBItem stpitm)
//{
// MyRTBItem = stpitm;
// DocVersionInfo dvi = MyRTBItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo;
// InitializeComponent();
// if (dvi != null && dvi.VersionType > 127)
// InApproved = false; // in approved
// cmbScope.SelectedIndex = 0;
// btnBookMrkAll.Enabled = false;
// btnFindNext.Enabled = false;
// btnReplace.Enabled = false;
// btnRplAll.Enabled = false;
// if (MyRTBItem.MyStepRTB.SelectionLength > 0)
// cmboFindText.Text = MyRTBItem.MyStepRTB.SelectedText;
// cmboFindText.Focus();
//}
// bug fix: B2016-107, when Find/Replace is initially opened, set the cursor focus to the Find Text box (called from frmVEPROMS.cs) // bug fix: B2016-107, when Find/Replace is initially opened, set the cursor focus to the Find Text box (called from frmVEPROMS.cs)
public void SetFocusToTextBox() public void SetFocusToTextBox()
{ {
cmboFindText.Focus(); cmboFindText.Focus();
} }
private bool DoingClick = false; // Don't allow a button to be clicked until processing is complete for the last button private bool DoingClick = false; // Don't allow a button to be clicked until processing is complete for the last button
private void btnReplace_Click(object sender, EventArgs e) private void btnReplace_Click(object sender, EventArgs e)
{ {
if (DoingClick) return;// Don't allow a button to be clicked until processing is complete for the last button if (DoingClick) return;// Don't allow a button to be clicked until processing is complete for the last button
DoingClick = true;// Don't allow a button to be clicked until processing is complete for the last button DoingClick = true;// We started processing a click
DoReplace(); DoReplace();
DoingClick = false;// Don't allow a button to be clicked until processing is complete for the last button DoingClick = false;// we're done processing the click
} }
private void DoReplace() private void DoReplace()
{ {
if (!IsFound) if (!IsFound)
DoFindNext(); DoFindNext();
else else
{
MyEditItem.ReplaceText(cmboReplaceText.Text, cmboFindText.Text, cbxCaseSensitive.Checked, cbxWholeWord.Checked, cbxReverse.Checked, false, null); MyEditItem.ReplaceText(cmboReplaceText.Text, cmboFindText.Text, cbxCaseSensitive.Checked, cbxWholeWord.Checked, cbxReverse.Checked, false, null);
}
} }
private void btnRplAll_Click(object sender, EventArgs e) private void btnRplAll_Click(object sender, EventArgs e)
{ {
if (DoingClick) return;// Don't allow a button to be clicked until processing is complete for the last button if (DoingClick) return;// Don't allow a button to be clicked until processing is complete for the last button
DoingClick = true;// Don't allow a button to be clicked until processing is complete for the last button DoingClick = true; // We started processing a click
DoRplAll(); DoRplAll();
DoingClick = false;// Don't allow a button to be clicked until processing is complete for the last button DoingClick = false; // we're done processing the click
} }
private void DoRplAll() private void DoRplAll()
{ {
@ -172,9 +139,9 @@ namespace Volian.Controls.Library
private void btnBookMrkAll_Click(object sender, EventArgs e) private void btnBookMrkAll_Click(object sender, EventArgs e)
{ {
if (DoingClick) return;// Don't allow a button to be clicked until processing is complete for the last button if (DoingClick) return;// Don't allow a button to be clicked until processing is complete for the last button
DoingClick = true;// Don't allow a button to be clicked until processing is complete for the last button DoingClick = true; // We started processing a click
DoBookMrkAll(); DoBookMrkAll();
DoingClick = false;// Don't allow a button to be clicked until processing is complete for the last button DoingClick = false; // we're done processing the click
} }
private void DoBookMrkAll() private void DoBookMrkAll()
{ {
@ -193,7 +160,6 @@ namespace Volian.Controls.Library
} }
private void btnFndRplDone_Click(object sender, EventArgs e) private void btnFndRplDone_Click(object sender, EventArgs e)
{ {
//this.Close();
doingfind = false; doingfind = false;
this.Visible = false; this.Visible = false;
} }
@ -229,10 +195,48 @@ namespace Volian.Controls.Library
private void btnFindNext_Click(object sender, EventArgs e) private void btnFindNext_Click(object sender, EventArgs e)
{ {
if (DoingClick) return;// Don't allow a button to be clicked until processing is complete for the last button if (DoingClick) return;// Don't allow a button to be clicked until processing is complete for the last button
DoingClick = true;// Don't allow a button to be clicked until processing is complete for the last button DoingClick = true;// We started processing a click
DoFindNext(); DoFindNext();
DoingClick = false;// Don't allow a button to be clicked until processing is complete for the last button DoingClick = false;// we're done processing the click
} }
// C2023-016 Find the next element, but stay in the same procedure
private ItemInfo FindNextStepElement(ItemInfo curStepElem, string fndStr)
{
ItemInfo nxtStepElem = curStepElem;
if (_StartingItemInfo == null)
_StartingItemInfo = MyEditItem.MyItemInfo;
if (cbxReverse.Checked)
{
if (curStepElem.IsProcedure)
nxtStepElem = curStepElem.MyProcedure.SearchBottom; // at the top of the procedure, so next step would be the last step of the last section (or the section title if the last section is a Word section)
else
nxtStepElem = curStepElem.SearchPrev;
}
else if (curStepElem.SearchNext.IsProcedure) // searching(finding) forward but next is the next procedure, so jump to the top of the procedure (the procedure title in the step editor)
nxtStepElem = curStepElem.MyProcedure;
else
nxtStepElem = curStepElem.SearchNext;
// B2015-131 Find was not finding series of words when one or more of the words were bolded or underlined (ex finding "Any SG" where Any was bolded)
while (nxtStepElem != null && nxtStepElem.ItemID != _StartingItemInfo.ItemID)
{
if (nxtStepElem.MyContent != null && ContainsFndStr(RtfTools.RTFConvertedSymbolsToUnicode(nxtStepElem.MyContent.Text).ToUpper(), fndStr.ToUpper()))
break;
if (cbxReverse.Checked)
{
if (nxtStepElem.IsProcedure)
nxtStepElem = nxtStepElem.MyProcedure.SearchBottom;// at the top of the procedure, so next step would be the last step of the last section (or the section title if the last section is a Word section)
else
nxtStepElem = nxtStepElem.SearchPrev;
}
else if (nxtStepElem.SearchNext.IsProcedure)
nxtStepElem = nxtStepElem.MyProcedure;// searching(finding) forward but next is the next procedure, so jump to the top of the procedure(the procedure title in the step editor)
else
nxtStepElem = nxtStepElem.SearchNext;
}
return nxtStepElem;
}
private void DoFindNext() private void DoFindNext()
{ {
AddToComboLists(); AddToComboLists();
@ -240,32 +244,21 @@ namespace Volian.Controls.Library
string fndStr = FixSymbol(cmboFindText.Text.Replace(@"\", @"\u9586?").Replace("-", @"\u8209?").Replace("\xa0", @"\u160?")); string fndStr = FixSymbol(cmboFindText.Text.Replace(@"\", @"\u9586?").Replace("-", @"\u8209?").Replace("\xa0", @"\u160?"));
while (!MyEditItem.FindText(cmboFindText.Text, cbxCaseSensitive.Checked, cbxWholeWord.Checked, cbxReverse.Checked)) while (!MyEditItem.FindText(cmboFindText.Text, cbxCaseSensitive.Checked, cbxWholeWord.Checked, cbxReverse.Checked))
{ {
ItemInfo next = (cbxReverse.Checked) ? MyEditItem.MyItemInfo.SearchPrev : MyEditItem.MyItemInfo.SearchNext; ItemInfo next = FindNextStepElement(MyEditItem.MyItemInfo, fndStr);
// B2015-131 Find was not finding series of words when one or more of the words were bolded or underlined (ex finding "Any SG" where Any was bolded) MyEditItem.MyStepPanel.MyStepTabPanel.MyDisplayTabControl.OpenItem(next,true,true);// C2023-016 open item (next), set focus (true), doing Find/Replace so don't open Word section (true)
while ((next != null) && !next.IsSection && !ContainsFndStr(RtfTools.RTFConvertedSymbolsToUnicode(next.MyContent.Text).ToUpper(), fndStr.ToUpper()))
{
next = (cbxReverse.Checked) ? next.SearchPrev : next.SearchNext;
}
//if (next != null) Console.WriteLine("next {0} {1}", next.ItemID, next.MyContent.Text);
if ((next == null) || next.IsSection)
{
if (!findingbookmarks)
{
// C2020-015: Improve dialog messaging
if (cbxReverse.Checked)
FlexibleMessageBox.Show(this, "Nothing found here to beginning of this section", "End of Find/Replace");
else
FlexibleMessageBox.Show(this, "Nothing found here to end of this section", "End of Find/Replace");
}
FoundIt = false;
return;
}
MyEditItem.MyStepPanel.MyStepTabPanel.MyDisplayTabControl.OpenItem(next);
if (cbxReverse.Checked) if (cbxReverse.Checked)
MyEditItem.PositionToEnd(); MyEditItem.PositionToEnd();
if (next.IsTable && !cbxReverse.Checked) MyEditItem.PositionToStart(); if (next.IsTable && !cbxReverse.Checked) MyEditItem.PositionToStart();
//C2023-016 if we spun through all of the step editor sections, stop and display a message
if (MyEditItem.MyItemInfo.ItemID == _StartingItemInfo.ItemID)
{
FoundIt = false;
string msg = string.Format("Back to the starting point of the Find/Replace.{0}",(findingbookmarks)?"\n\n The Tools Panel will display showing the locations.":"");
FlexibleMessageBox.Show(this, msg, "Find/Replace Completed");
_StartingItemInfo = null;
return;
}
} }
if (MyEditItem.MyStepRTB != null && !MyEditItem.MyStepRTB.Visible) if (MyEditItem.MyStepRTB != null && !MyEditItem.MyStepRTB.Visible)
{ {
@ -286,7 +279,7 @@ namespace Volian.Controls.Library
{ {
if (cmboFindText.Items.Count >= 10) if (cmboFindText.Items.Count >= 10)
cmboFindText.Items.RemoveAt(9); cmboFindText.Items.RemoveAt(9);
cmboFindText.Items.Insert(0, cmboFindText.Text);//.Add(cmboFindText.Text); cmboFindText.Items.Insert(0, cmboFindText.Text);
} }
hastext = this.cmboReplaceText.Text.Length > 0; hastext = this.cmboReplaceText.Text.Length > 0;
if (hastext && btnReplace.Enabled && !cmboReplaceText.Items.Contains(cmboReplaceText.Text)) if (hastext && btnReplace.Enabled && !cmboReplaceText.Items.Contains(cmboReplaceText.Text))
@ -302,11 +295,13 @@ namespace Volian.Controls.Library
btnFindNext.Enabled = hastext; btnFindNext.Enabled = hastext;
btnBookMrkAll.Enabled = hastext; btnBookMrkAll.Enabled = hastext;
btnReplace.Enabled = btnRplAll.Enabled = hastext && !InApproved; btnReplace.Enabled = btnRplAll.Enabled = hastext && !InApproved;
_StartingItemInfo = null; //C2023-016 reset the starting position
} }
private void cmboReplaceText_TextChanged(object sender, EventArgs e) private void cmboReplaceText_TextChanged(object sender, EventArgs e)
{ {
btnReplace.Enabled = btnRplAll.Enabled = !InApproved && cmboFindText.Text.Length > 0; btnReplace.Enabled = btnRplAll.Enabled = !InApproved && cmboFindText.Text.Length > 0;
_StartingItemInfo = null;//C2023-016 reset the starting position
} }
public void PerformFindNext() public void PerformFindNext()
@ -336,17 +331,6 @@ namespace Volian.Controls.Library
e.Cancel = true; // cancel the form close event - the Done_Click() will hide it instead e.Cancel = true; // cancel the form close event - the Done_Click() will hide it instead
} }
private void cmboFindText_Leave(object sender, EventArgs e)
{
//bool hastext = this.cmboFindText.Text.Length > 0;
//if (hastext && !cmboFindText.Items.Contains(cmboFindText.Text))
//{
// if (cmboFindText.Items.Count >= 10)
// cmboFindText.Items.RemoveAt(9);
// cmboFindText.Items.Insert(0, cmboFindText.Text);//.Add(cmboFindText.Text);
//}
}
private void btnCmCut_Click(object sender, EventArgs e) private void btnCmCut_Click(object sender, EventArgs e)
{ {
Clipboard.Clear(); Clipboard.Clear();
@ -456,6 +440,22 @@ namespace Volian.Controls.Library
tabReplace.Visible = true; tabReplace.Visible = true;
Text = "Find and Replace";//C2021-021 change the dialog title Text = "Find and Replace";//C2021-021 change the dialog title
} }
_StartingItemInfo = null;//C2023-016 reset the starting position
}
private void cbxCaseSensitive_CheckedChanged(object sender, EventArgs e)
{
_StartingItemInfo = null;//C2023-016 reset the starting position
}
private void cbxWholeWord_CheckedChanged(object sender, EventArgs e)
{
_StartingItemInfo = null;//C2023-016 reset the starting position
}
private void cbxReverse_CheckedChanged(object sender, EventArgs e)
{
_StartingItemInfo = null;//C2023-016 reset the starting position
} }
} }
} }