git-svn-id: https://lsleditor.svn.sourceforge.net/svnroot/lsleditor@9 3f4676ac-adda-40fd-8265-58d1435b1672
315 lines
No EOL
7.9 KiB
C#
315 lines
No EOL
7.9 KiB
C#
// /**
|
|
// ********
|
|
// *
|
|
// * ORIGIONAL CODE BASE IS Copyright (C) 2006-2010 by Alphons van der Heijden
|
|
// * The code was donated on 4/28/2010 by Alphons van der Heijden
|
|
// * To Brandon'Dimentox Travanti' Husbands & Malcolm J. Kudra which in turn Liscense under the GPLv2.
|
|
// * In agreement to Alphons van der Heijden wishes.
|
|
// *
|
|
// * The community would like to thank Alphons for all of his hard work, blood sweat and tears.
|
|
// * Without his work the community would be stuck with crappy editors.
|
|
// *
|
|
// * The source code in this file ("Source Code") is provided by The LSLEditor Group
|
|
// * to you under the terms of the GNU General Public License, version 2.0
|
|
// * ("GPL"), unless you have obtained a separate licensing agreement
|
|
// * ("Other License"), formally executed by you and The LSLEditor Group. Terms of
|
|
// * the GPL can be found in the gplv2.txt document.
|
|
// *
|
|
// ********
|
|
// * GPLv2 Header
|
|
// ********
|
|
// * LSLEditor, a External editor for the LSL Language.
|
|
// * Copyright (C) 2010 The LSLEditor Group.
|
|
//
|
|
// * This program is free software; you can redistribute it and/or
|
|
// * modify it under the terms of the GNU General Public License
|
|
// * as published by the Free Software Foundation; either version 2
|
|
// * of the License, or (at your option) any later version.
|
|
// *
|
|
// * This program is distributed in the hope that it will be useful,
|
|
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// * GNU General Public License for more details.
|
|
// *
|
|
// * You should have received a copy of the GNU General Public License
|
|
// * along with this program; if not, write to the Free Software
|
|
// * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
// ********
|
|
// *
|
|
// * The above copyright notice and this permission notice shall be included in all
|
|
// * copies or substantial portions of the Software.
|
|
// *
|
|
// ********
|
|
// */
|
|
using System;
|
|
using System.Text; // StringBuilder
|
|
using System.Text.RegularExpressions;
|
|
using System.Windows.Forms;
|
|
|
|
namespace LSLEditor
|
|
{
|
|
public partial class FindWindow : Form
|
|
{
|
|
private LSLEditorForm lslEditForm;
|
|
private int intStart;
|
|
private int intEnd;
|
|
|
|
private bool m_ReplaceAlso;
|
|
|
|
public FindWindow(LSLEditorForm lslEditForm)
|
|
{
|
|
InitializeComponent();
|
|
this.lslEditForm = lslEditForm;
|
|
this.intStart = 0;
|
|
this.intEnd = 0;
|
|
}
|
|
|
|
public bool ReplaceAlso
|
|
{
|
|
get
|
|
{
|
|
return m_ReplaceAlso;
|
|
}
|
|
set
|
|
{
|
|
m_ReplaceAlso = value;
|
|
this.groupBox2.Enabled = m_ReplaceAlso;
|
|
this.Replace.Enabled = m_ReplaceAlso;
|
|
this.ReplaceAll.Enabled = m_ReplaceAlso;
|
|
|
|
if (m_ReplaceAlso)
|
|
this.Text = "Find and Replace";
|
|
else
|
|
this.Text = "Find";
|
|
}
|
|
}
|
|
|
|
public string KeyWord
|
|
{
|
|
set
|
|
{
|
|
this.label1.Text = ""; // clear out message
|
|
if (value != "")
|
|
{
|
|
this.comboBoxFind.Text = value;
|
|
}
|
|
else
|
|
{
|
|
if (this.comboBoxFind.Items.Count > 0)
|
|
this.comboBoxFind.SelectedIndex = this.comboBoxFind.Items.Count - 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool UpdateComboBox(ComboBox comboBox)
|
|
{
|
|
string strText = comboBox.Text;
|
|
bool Found = false;
|
|
|
|
foreach (string strC in comboBox.Items)
|
|
{
|
|
if (strC == strText)
|
|
{
|
|
Found = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!Found)
|
|
comboBox.Items.Add(strText);
|
|
return Found;
|
|
}
|
|
|
|
public void Find()
|
|
{
|
|
this.label1.Text = "";
|
|
EditForm editForm = this.lslEditForm.ActiveMdiForm as EditForm;
|
|
if (editForm == null)
|
|
return;
|
|
|
|
if (!UpdateComboBox(this.comboBoxFind))
|
|
{
|
|
editForm.TextBox.SelectionLength = 0;
|
|
editForm.TextBox.SelectionStart = 0;
|
|
}
|
|
|
|
RichTextBoxFinds options = RichTextBoxFinds.None;
|
|
|
|
if (this.checkBoxMatchCase.Checked) options |= RichTextBoxFinds.MatchCase;
|
|
if (this.checkBoxReverse.Checked) options |= RichTextBoxFinds.Reverse;
|
|
if (this.checkBoxWholeWord.Checked) options |= RichTextBoxFinds.WholeWord;
|
|
|
|
if (this.checkBoxReverse.Checked)
|
|
{
|
|
intStart = 0; // start cant change ;-)
|
|
intEnd = editForm.TextBox.SelectionStart;
|
|
}
|
|
else
|
|
{
|
|
intStart = editForm.TextBox.SelectionStart + editForm.TextBox.SelectionLength;
|
|
if (intStart == editForm.TextBox.Text.Length)
|
|
intStart = 0;
|
|
intEnd = editForm.TextBox.Text.Length - 1; // length can change!!
|
|
}
|
|
|
|
string strFind = this.comboBoxFind.Text;
|
|
int intIndex = editForm.Find(strFind, intStart, intEnd, options);
|
|
if (intIndex < 0)
|
|
{
|
|
this.label1.Text = "Not found...";
|
|
return;
|
|
}
|
|
}
|
|
|
|
private void FindNext_Click(object sender, EventArgs e)
|
|
{
|
|
Find();
|
|
this.Focus();
|
|
}
|
|
|
|
private void comboBoxFind_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Return)
|
|
{
|
|
if (this.Replace.Enabled)
|
|
{
|
|
this.comboBoxReplace.Focus();
|
|
e.SuppressKeyPress = true;
|
|
}
|
|
else
|
|
{
|
|
Find();
|
|
e.SuppressKeyPress = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void Replace_Click(object sender, EventArgs e)
|
|
{
|
|
EditForm editForm = this.lslEditForm.ActiveMdiForm as EditForm;
|
|
if (editForm == null)
|
|
return;
|
|
|
|
UpdateComboBox(this.comboBoxReplace);
|
|
|
|
if (editForm.TextBox.SelectionLength > 0)
|
|
{
|
|
string strReplacement = this.comboBoxReplace.Text;
|
|
editForm.TextBox.ReplaceSelectedText(strReplacement);
|
|
}
|
|
|
|
Find();
|
|
this.Focus();
|
|
}
|
|
|
|
// WildCardToRegex not used!!
|
|
private string WildCardToRegex(string strWildCard)
|
|
{
|
|
StringBuilder sb = new StringBuilder(strWildCard.Length + 8);
|
|
for (int intI = 0; intI < strWildCard.Length; intI++)
|
|
{
|
|
char chrC = strWildCard[intI];
|
|
switch (chrC)
|
|
{
|
|
case '*':
|
|
sb.Append(".*");
|
|
break;
|
|
case '?':
|
|
sb.Append(".");
|
|
break;
|
|
case '\\':
|
|
intI++;
|
|
if (intI < strWildCard.Length)
|
|
sb.Append(Regex.Escape(strWildCard[intI].ToString()));
|
|
break;
|
|
default:
|
|
sb.Append(Regex.Escape(chrC.ToString()));
|
|
break;
|
|
}
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
|
|
private void ReplaceAll_Click(object sender, EventArgs e)
|
|
{
|
|
EditForm editForm = this.lslEditForm.ActiveMdiForm as EditForm;
|
|
if (editForm == null)
|
|
return;
|
|
|
|
UpdateComboBox(this.comboBoxReplace);
|
|
|
|
string strPattern;
|
|
string strFind = Regex.Escape(this.comboBoxFind.Text);
|
|
string strReplacement = this.comboBoxReplace.Text;
|
|
string strSourceCode = editForm.SourceCode;
|
|
|
|
RegexOptions regexOptions = RegexOptions.Compiled;
|
|
if (!this.checkBoxMatchCase.Checked)
|
|
regexOptions |= RegexOptions.IgnoreCase;
|
|
if (this.checkBoxWholeWord.Checked)
|
|
strPattern = @"\b" + strFind + @"\b";
|
|
else
|
|
strPattern = strFind;
|
|
|
|
Regex regex = new Regex(strPattern, regexOptions);
|
|
|
|
int intCount = 0;
|
|
foreach(Match m in regex.Matches(strSourceCode))
|
|
{
|
|
if (m.Value.Length > 0)
|
|
intCount++;
|
|
}
|
|
if (intCount == 0)
|
|
{
|
|
MessageBox.Show("No matches found");
|
|
}
|
|
else
|
|
{
|
|
if (MessageBox.Show("There are " + intCount + " occurences, replace them all?", "Find and Replace", MessageBoxButtons.YesNoCancel) == DialogResult.Yes)
|
|
editForm.SourceCode = regex.Replace(strSourceCode, strReplacement);
|
|
}
|
|
this.Focus();
|
|
}
|
|
|
|
private void FindWindow_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
lslEditForm.TopMost = true; // 15 nove 2007
|
|
this.Visible = false;
|
|
e.Cancel = true;
|
|
lslEditForm.TopMost = false;// 15 nove 2007
|
|
}
|
|
|
|
private void FindWindow_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyData == Keys.Escape)
|
|
{
|
|
this.Visible = false;
|
|
e.SuppressKeyPress = true;
|
|
e.Handled = true;
|
|
}
|
|
|
|
if (e.KeyCode == Keys.Return)
|
|
{
|
|
Find();
|
|
e.SuppressKeyPress = true;
|
|
this.Focus();
|
|
}
|
|
|
|
if (e.KeyCode == Keys.F3)
|
|
{
|
|
Find();
|
|
e.SuppressKeyPress = true;
|
|
this.Focus();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public void FindFocus()
|
|
{
|
|
this.comboBoxFind.Focus();
|
|
}
|
|
|
|
|
|
}
|
|
} |