372 lines
12 KiB
C#
372 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using VEPROMS.CSLA.Library;
|
|
|
|
namespace Volian.Controls.Library
|
|
{
|
|
public partial class FindReplace : DevComponents.DotNetBar.Office2007Form
|
|
{
|
|
private bool doingfind = false;
|
|
private bool found = false;
|
|
private bool findingbookmarks = false;
|
|
|
|
//private bool _offsetStartPos = false;
|
|
private StepItem _MyStepItem;
|
|
public StepItem MyStepItem
|
|
{
|
|
get { return _MyStepItem; }
|
|
set
|
|
{
|
|
_MyStepItem = value;
|
|
//DocVersionInfo dvi = _MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo; //MyStepItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo;
|
|
_MyDocVersion = _MyStepItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo;
|
|
SetupContextMenu();
|
|
//_offsetStartPos = false; // in a different rtf box, don't offset find position first time around
|
|
}
|
|
}
|
|
//private DocVersionInfo _MyDVI;
|
|
//public DocVersionInfo MyDVI
|
|
//{
|
|
// get
|
|
// {
|
|
// if (_MyDVI != null) return _MyDVI;
|
|
// if (_MyStepItem != null)
|
|
// {
|
|
// ItemInfo procInfo = _MyStepItem.MyItemInfo.MyProcedure as ItemInfo;
|
|
// if (procInfo == null) return null;
|
|
// _MyDVI = procInfo.ActiveParent as DocVersionInfo;
|
|
// return _MyDVI;
|
|
// }
|
|
// return null;
|
|
// }
|
|
//}
|
|
|
|
private DocVersionInfo _MyDocVersion;
|
|
public DocVersionInfo Mydocversion
|
|
{
|
|
get { return _MyDocVersion; }
|
|
set
|
|
{
|
|
_MyDocVersion = value;
|
|
//if (_MyDocVersion != null)
|
|
//{
|
|
// if (_MyDocVersion.DocVersionAssociationCount > 0)
|
|
// {
|
|
// MyROFSTLookup = _MyDocVersion.DocVersionAssociations[0].MyROFst.ROFSTLookup;
|
|
// _MyRODbID = _MyDocVersion.DocVersionAssociations[0].MyROFst.RODbID;
|
|
// }
|
|
//}
|
|
}
|
|
}
|
|
private DisplayBookMarks _myDisplayBookMarks;
|
|
|
|
public DisplayBookMarks MyDisplayBookMarks
|
|
{
|
|
get { return _myDisplayBookMarks; }
|
|
set { _myDisplayBookMarks = value; }
|
|
}
|
|
|
|
private bool _InApproved;
|
|
|
|
public bool InApproved
|
|
{
|
|
get { return _InApproved; }
|
|
set { _InApproved = value; }
|
|
}
|
|
|
|
public FindReplace()
|
|
{
|
|
//DocVersionInfo dvi = MyStepItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo;
|
|
InitializeComponent();
|
|
LoadFindReplaceTextListBox();
|
|
//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 (MyStepItem.MyStepRTB.SelectionLength > 0)
|
|
// cmboFindText.Text = MyStepItem.MyStepRTB.SelectedText;
|
|
cmboFindText.Focus();
|
|
//SetupContextMenu();
|
|
}
|
|
private void LoadFindReplaceTextListBox()
|
|
{
|
|
// Setup cmboFindText Combo box
|
|
cmboFindText.Items.Clear();
|
|
if (Properties.Settings.Default["FindTextList"] != null && Properties.Settings.Default.FindTextList.Count > 0)
|
|
{
|
|
foreach (string str in Properties.Settings.Default.FindTextList)
|
|
cmboFindText.Items.Add(str);
|
|
}
|
|
// Setup cmboReplaceText Combo box
|
|
cmboReplaceText.Items.Clear();
|
|
if (Properties.Settings.Default["ReplaceTextList"] != null && Properties.Settings.Default.ReplaceTextList.Count > 0)
|
|
{
|
|
foreach (string str in Properties.Settings.Default.ReplaceTextList)
|
|
cmboReplaceText.Items.Add(str);
|
|
}
|
|
}
|
|
|
|
//public FindReplace(StepItem stpitm)
|
|
//{
|
|
// MyStepItem = stpitm;
|
|
// DocVersionInfo dvi = MyStepItem.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 (MyStepItem.MyStepRTB.SelectionLength > 0)
|
|
// cmboFindText.Text = MyStepItem.MyStepRTB.SelectedText;
|
|
// cmboFindText.Focus();
|
|
//}
|
|
|
|
|
|
private void btnReplace_Click(object sender, EventArgs e)
|
|
{
|
|
btnFindNext_Click(sender, e);
|
|
if (found) // found is set in btnFindNext_Click()
|
|
MyStepItem.MyStepRTB.ReplaceText(cmboReplaceText.Text, cmboFindText.Text, cbxCaseSensitive.Checked, cbxWholeWord.Checked, cbxReverse.Checked, false, null);
|
|
}
|
|
|
|
private void btnRplAll_Click(object sender, EventArgs e)
|
|
{
|
|
btnFindNext_Click(sender, e);
|
|
while (found) // found is set in btnFindNext_Click()
|
|
{
|
|
if (MyStepItem.MyStepRTB.ReplaceText(cmboReplaceText.Text, cmboFindText.Text, cbxCaseSensitive.Checked, cbxWholeWord.Checked, cbxReverse.Checked, true, this) == DialogResult.Cancel)
|
|
found = false;
|
|
else
|
|
btnFindNext_Click(sender, e);
|
|
}
|
|
}
|
|
|
|
private void btnBookMrkAll_Click(object sender, EventArgs e)
|
|
{
|
|
findingbookmarks = true;
|
|
btnFindNext_Click(sender, e);
|
|
while (found) // found is set in btnFindNext_Click()
|
|
{
|
|
MyDisplayBookMarks.AddBookMark(MyStepItem.MyItemInfo);
|
|
btnFindNext_Click(sender, e);
|
|
}
|
|
StepPanelTabDisplayEventArgs args = new StepPanelTabDisplayEventArgs("Bookmarks");
|
|
MyStepItem.MyStepPanel.OnTabDisplay(sender, args);
|
|
findingbookmarks = false;
|
|
}
|
|
|
|
private void btnFndRplDone_Click(object sender, EventArgs e)
|
|
{
|
|
//this.Close();
|
|
doingfind = false;
|
|
this.Visible = false;
|
|
}
|
|
|
|
private void btnFindNext_Click(object sender, EventArgs e)
|
|
{
|
|
found = false;
|
|
AddToComboLists();
|
|
doingfind = true;
|
|
while (!MyStepItem.MyStepRTB.FindText(cmboFindText.Text, cbxCaseSensitive.Checked, cbxWholeWord.Checked, cbxReverse.Checked))
|
|
{
|
|
ItemInfo next = (cbxReverse.Checked) ? MyStepItem.MyItemInfo.SearchPrev : MyStepItem.MyItemInfo.SearchNext;
|
|
while (!next.IsSection && !next.MyContent.Text.ToUpper().Contains(cmboFindText.Text.ToUpper()))
|
|
next = (cbxReverse.Checked) ? next.SearchPrev : next.SearchNext;
|
|
if (next.IsSection)
|
|
{
|
|
if (!findingbookmarks)
|
|
{
|
|
if (cbxReverse.Checked)
|
|
MessageBox.Show(this, "Not Found - From Here to Beginning of Section", "Find/Replace");
|
|
else
|
|
MessageBox.Show(this, "Not Found - From Here to End of Section", "Find/Replace");
|
|
}
|
|
return;
|
|
}
|
|
MyStepItem.MyStepPanel.MyStepTabPanel.MyDisplayTabControl.OpenItem(next);
|
|
if (cbxReverse.Checked)
|
|
MyStepItem.MyStepRTB.SelectionStart = MyStepItem.MyStepRTB.Text.Length;
|
|
}
|
|
MyStepItem.MyStepRTB.Focus();
|
|
found = true;
|
|
}
|
|
|
|
private void AddToComboLists()
|
|
{
|
|
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);
|
|
}
|
|
hastext = this.cmboReplaceText.Text.Length > 0;
|
|
if (hastext && btnReplace.Enabled && !cmboReplaceText.Items.Contains(cmboReplaceText.Text))
|
|
{
|
|
if (cmboReplaceText.Items.Count >= 10)
|
|
cmboReplaceText.Items.RemoveAt(9);
|
|
cmboReplaceText.Items.Insert(0, cmboReplaceText.Text);
|
|
}
|
|
}
|
|
private void cmboFindText_TextChanged(object sender, EventArgs e)
|
|
{
|
|
bool hastext = this.cmboFindText.Text.Length > 0;
|
|
btnFindNext.Enabled = hastext;
|
|
btnBookMrkAll.Enabled = hastext;
|
|
btnReplace.Enabled = btnRplAll.Enabled = hastext && !InApproved;
|
|
}
|
|
|
|
private void cmboReplaceText_TextChanged(object sender, EventArgs e)
|
|
{
|
|
btnReplace.Enabled = btnRplAll.Enabled = !InApproved && cmboFindText.Text.Length > 0;
|
|
}
|
|
|
|
public void PerformFindNext()
|
|
{
|
|
btnFindNext.PerformClick();
|
|
}
|
|
|
|
private void tabFind_Click(object sender, EventArgs e)
|
|
{
|
|
lblRplTxt.Visible = false;
|
|
cmboReplaceText.Visible = false;
|
|
btnReplace.Visible = false;
|
|
btnRplAll.Visible = false;
|
|
}
|
|
|
|
private void tabReplace_Click(object sender, EventArgs e)
|
|
{
|
|
lblRplTxt.Visible = true;
|
|
cmboReplaceText.Visible = true;
|
|
btnReplace.Visible = true;
|
|
btnRplAll.Visible = true;
|
|
}
|
|
|
|
private void FindReplace_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
btnFndRplDone_Click(sender, e);
|
|
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)
|
|
{
|
|
Clipboard.Clear();
|
|
DataObject myDO = new DataObject(DataFormats.Text, cmboReplaceText.Focused ? cmboReplaceText.SelectedText : cmboFindText.SelectedText);
|
|
Clipboard.SetDataObject(myDO);
|
|
// Need to check which combo box activated the context menu so that we know where to take/put selected text
|
|
if (cmboFindText.Focused)
|
|
cmboFindText.SelectedText = "";
|
|
else if (cmboReplaceText.Focused)
|
|
cmboReplaceText.SelectedText = "";
|
|
}
|
|
|
|
private void btnCmCopy_Click(object sender, EventArgs e)
|
|
{
|
|
// Need to check which combo box activated the context menu so that we know where to take/put selected text
|
|
DataObject myDO = new DataObject(DataFormats.Text, cmboReplaceText.Focused ? cmboReplaceText.SelectedText : cmboFindText.SelectedText);
|
|
if (cmboFindText.Focused || cmboReplaceText.Focused)
|
|
{
|
|
Clipboard.Clear();
|
|
Clipboard.SetDataObject(myDO);
|
|
}
|
|
}
|
|
|
|
private void btnCmPaste_Click(object sender, EventArgs e)
|
|
{
|
|
// Need to check which combo box activated the context menu so that we know where to take/put selected text
|
|
IDataObject myDO = Clipboard.GetDataObject();
|
|
if (myDO.GetDataPresent(DataFormats.Rtf))
|
|
{
|
|
StepRTB stpRTB = new StepRTB();
|
|
stpRTB.SelectedRtf = myDO.GetData(DataFormats.Rtf).ToString();
|
|
if (cmboReplaceText.Focused)
|
|
cmboReplaceText.SelectedText = stpRTB.Text;
|
|
else if (cmboFindText.Focused)
|
|
cmboFindText.SelectedText = stpRTB.Text;
|
|
}
|
|
else if (myDO.GetDataPresent(DataFormats.Text))
|
|
if (cmboReplaceText.Focused)
|
|
cmboReplaceText.SelectedText = Clipboard.GetText();
|
|
else if (cmboFindText.Focused)
|
|
cmboFindText.SelectedText = Clipboard.GetText();
|
|
}
|
|
|
|
private void btnCmHardSp_Click(object sender, EventArgs e)
|
|
{
|
|
// We use \u00A0 to represent a hard space because it show in the search text field as a blank
|
|
// It will get translated to a real hard space character prior to searching
|
|
if (cmboReplaceText.Focused)
|
|
cmboReplaceText.SelectedText = "\u00A0";
|
|
else if (cmboFindText.Focused)
|
|
cmboFindText.SelectedText = "\u00A0";
|
|
}
|
|
private void btnSym_Click(object sender, EventArgs e)
|
|
{
|
|
DevComponents.DotNetBar.ButtonItem b = (DevComponents.DotNetBar.ButtonItem)sender;
|
|
if (cmboReplaceText.Focused)
|
|
cmboReplaceText.SelectedText = (string)b.Text;
|
|
else if (cmboFindText.Focused)
|
|
cmboFindText.SelectedText = (string)b.Text;
|
|
}
|
|
private void SetupContextMenu()
|
|
{
|
|
galSymbols.SubItems.Clear();
|
|
if (_MyDocVersion != null)
|
|
{
|
|
FormatData fmtdata = _MyDocVersion.ActiveFormat.PlantFormat.FormatData;
|
|
SymbolList sl = fmtdata.SymbolList;
|
|
if (sl == null || sl.Count <= 0)
|
|
{
|
|
MessageBox.Show(this, "No symbols are available, check with administrator");
|
|
return;
|
|
}
|
|
foreach (Symbol sym in sl)
|
|
{
|
|
DevComponents.DotNetBar.ButtonItem btnCM = new DevComponents.DotNetBar.ButtonItem();
|
|
btnCM.Text = string.Format("{0}", (char)sym.Unicode);
|
|
// to name button use unicode rather than desc, desc may have spaces or odd chars
|
|
btnCM.Name = "btnCM" + sym.Unicode.ToString();
|
|
btnCM.Tooltip = sym.Desc;
|
|
btnCM.Tag = string.Format(@"{0}", sym.Unicode);
|
|
btnCM.FontBold = true;
|
|
btnCM.Click += new System.EventHandler(btnSym_Click);
|
|
galSymbols.SubItems.Add(btnCM);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void FindReplace_Activated(object sender, EventArgs e)
|
|
{
|
|
StepRTB srtb = MyStepItem.MyStepRTB;
|
|
if (srtb.SelectionLength > 0 && !doingfind)
|
|
{
|
|
if (srtb.IsSelectionLinked(srtb.SelectionStart, srtb.SelectionLength))
|
|
cmboFindText.Text = srtb.SelectedText.Substring(0, srtb.SelectedText.IndexOf("#Link"));
|
|
else
|
|
cmboFindText.Text = srtb.SelectedText;
|
|
}
|
|
}
|
|
|
|
}
|
|
} |