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;
}
}
}
}