mirror of
https://github.com/AdAstra-LD/DS-Pokemon-Rom-Editor.git
synced 2026-05-11 14:34:21 -05:00
136 lines
3.8 KiB
C#
136 lines
3.8 KiB
C#
using System;
|
|
using System.Windows.Forms;
|
|
|
|
namespace ScintillaNET.Utils {
|
|
internal class SearchManager {
|
|
|
|
public Form MainProgram { get; private set; }
|
|
public Scintilla textAreaScintilla { get; private set; }
|
|
public Panel searchPanel { get; private set; }
|
|
public TextBox searchBox { get; private set; }
|
|
|
|
public string lastSearched = "";
|
|
public int LastSearchIndex { get; private set; }
|
|
|
|
public bool SearchIsOpen = false;
|
|
public SearchManager(Form mainprogram, Scintilla TextArea, TextBox SearchBox, Panel SearchPanel) {
|
|
this.MainProgram = mainprogram;
|
|
this.textAreaScintilla = TextArea;
|
|
this.searchBox = SearchBox;
|
|
this.searchPanel = SearchPanel;
|
|
}
|
|
|
|
public void Find(bool next, bool incremental, string searchThis = null) {
|
|
bool firstTimeResearchingThis = lastSearched != searchThis;
|
|
|
|
lastSearched = searchThis == null ? searchBox.Text : searchThis;
|
|
if (lastSearched.Length > 0) {
|
|
|
|
if (next) {
|
|
|
|
// SEARCH FOR THE NEXT OCCURRENCE
|
|
|
|
// Search the document at the last search index
|
|
textAreaScintilla.TargetStart = LastSearchIndex - 1;
|
|
textAreaScintilla.TargetEnd = LastSearchIndex + (lastSearched.Length + 1);
|
|
textAreaScintilla.SearchFlags = SearchFlags.None;
|
|
|
|
// Search, and if not found..
|
|
if (!incremental || textAreaScintilla.SearchInTarget(lastSearched) == -1) {
|
|
|
|
// Search the document from the caret onwards
|
|
textAreaScintilla.TargetStart = textAreaScintilla.CurrentPosition;
|
|
textAreaScintilla.TargetEnd = textAreaScintilla.TextLength;
|
|
textAreaScintilla.SearchFlags = SearchFlags.None;
|
|
|
|
// Search, and if not found..
|
|
if (textAreaScintilla.SearchInTarget(lastSearched) == -1) {
|
|
|
|
// Search again from top
|
|
textAreaScintilla.TargetStart = 0;
|
|
textAreaScintilla.TargetEnd = textAreaScintilla.TextLength;
|
|
|
|
// Search, and if not found..
|
|
if (textAreaScintilla.SearchInTarget(lastSearched) == -1) {
|
|
|
|
// clear selection and exit
|
|
textAreaScintilla.ClearSelections();
|
|
return;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// SEARCH FOR THE PREVIOUS OCCURRENCE
|
|
|
|
// Search the document from the beginning to the caret
|
|
textAreaScintilla.TargetStart = textAreaScintilla.CurrentPosition-1;
|
|
textAreaScintilla.TargetEnd = 0;
|
|
textAreaScintilla.SearchFlags = SearchFlags.None;
|
|
|
|
// Search, and if not found..
|
|
if (textAreaScintilla.SearchInTarget(lastSearched) == -1) {
|
|
|
|
// Search again from the caret onwards
|
|
textAreaScintilla.TargetStart = textAreaScintilla.CurrentPosition;
|
|
textAreaScintilla.TargetEnd = textAreaScintilla.TextLength;
|
|
|
|
// Search, and if not found..
|
|
if (textAreaScintilla.SearchInTarget(lastSearched) == -1) {
|
|
|
|
// clear selection and exit
|
|
textAreaScintilla.ClearSelections();
|
|
return;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// Select the occurance
|
|
this.LastSearchIndex = textAreaScintilla.TargetStart;
|
|
textAreaScintilla.SetSelection(textAreaScintilla.TargetEnd, textAreaScintilla.TargetStart);
|
|
textAreaScintilla.ScrollCaret();
|
|
}
|
|
|
|
searchBox.Focus();
|
|
}
|
|
|
|
public void OpenSearch() {
|
|
if (!SearchIsOpen) {
|
|
SearchIsOpen = true;
|
|
InvokeIfNeeded(MainProgram, delegate () {
|
|
searchPanel.Visible = true;
|
|
searchBox.Text = lastSearched;
|
|
searchBox.Focus();
|
|
searchBox.SelectAll();
|
|
});
|
|
} else {
|
|
InvokeIfNeeded(MainProgram, delegate() {
|
|
searchBox.Focus();
|
|
searchBox.SelectAll();
|
|
});
|
|
}
|
|
}
|
|
|
|
public void CloseSearch() {
|
|
if (SearchIsOpen) {
|
|
SearchIsOpen = false;
|
|
InvokeIfNeeded(MainProgram, delegate() {
|
|
searchPanel.Visible = false;
|
|
//CurBrowser.GetBrowser().StopFinding(true);
|
|
});
|
|
}
|
|
}
|
|
|
|
public void InvokeIfNeeded(Form MainProgram, Action action) {
|
|
if (MainProgram.InvokeRequired) {
|
|
MainProgram.BeginInvoke(action);
|
|
} else {
|
|
action.Invoke();
|
|
}
|
|
}
|
|
}
|
|
}
|