Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #region Top Part
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- // MyCustomLibrary.SearchForm3.cs
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- // v5.2.7.12 05-May-2019 Created and Roughed
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- // v5.2.7.14 12-May-2019 Great Design Stage.
- // v5.2.8.15 15-May-2019 Comin along nicely!
- // v5.2.8.16 16-May-2019 EyeOutBug Fixed ++
- // v5.2.8.17 18-May Split out from SF1 for
- // Buttons & getting ready for After-Dialog!
- // v5.2.8.18 26-May-2019 Worked into SF3:
- // v5.2.8.19 31-May Mechanisms such as the
- // PropertyChanged Events & App Detect plus
- // Tie-ins to Both MyEditor & PrintBlaster.
- // v5.2.9.19 June 2019, Ready Mods ++
- // v5.2.9.20 07-June Integration w/MyEditor!
- // v5.3.0.21 10-June Brought MySearchType &
- // SearchCom into SearchForm2, so now
- // it's MST for the Mutexes AND MySearchType
- // and SearchForm Class for what was MSC b4.
- // v5.3.0.21 15-June Getting Serious Now!
- // v5.3.1.23 25-Jun Coming Together! Rev-1;
- // v5.3.1.24 03-Jul FindByName2 Mod + Comm.
- // v5.3.1.25 10-July SearchForm Features plus.
- // v5.3.3.27 18-Jul-2019 4 way comms.
- // v5.3.3.28 21-Jul SmesaSearch.cs rockin it
- // -=[ Design Revision 4 ]=- My Custom Type.
- // v5.3.4.29 25-Jul-2019 Spelling things out
- // Class{in-Class{in-Class}}; Custom Types:
- // v5.3.5.30 30-July ReCoded4 WorkList2
- // v5.3.5.31 03-Aug ReCoded4 WorkList2
- // v5.4.5.32 07-Aug-2019 Search & Replace.
- // v5.4.5.33 12-Aug SF4 Split Out & Polish.
- // v5.4.5.34 18-Aug Sorting things out.
- // v5.4.6.36 29-Aug Work down testwells &
- // BreakPoints, Clean and Polish++
- // v5.4.7.40 24-Sep-2019 Settling down after
- // some evolution during tracing & testing.
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.IO;
- using System.Linq;
- using System.Security;
- using System.Threading;
- using System.Windows.Forms;
- // Class Aliases
- using MCD = MyCustomLibrary.Dialogs;
- using MMF = MyCustomLibrary.MemoryMapper;
- using MCT = MyCustomLibrary.MyToolbox;
- // Property Aliases
- using MCR = MyCustomLibrary.Properties.Resources;
- using MCS = MyCustomLibrary.Properties.Settings;
- #endregion Pop Tart
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- namespace MyCustomLibrary
- {
- public partial class SearchForm
- {
- #region Lower Level / Instrumental Methods
- #region By Name Method Group
- // REM: This Method is called from Loops
- void FindByName1()
- {
- const bool calledByMe = false;
- FindByName1(calledByMe);
- }
- // This OverLoad is ONLY directly called
- // from FindByName2(); & the overload
- // above. (True only if ME calling.)
- void FindByName1(bool find2)
- {
- Indexes = new Collection<int>();
- foreach (var file in MCD.WholeList
- .Where(file => !string
- .IsNullOrEmpty(searchBox.Text)
- && !string.IsNullOrEmpty(
- file) && File.Exists(file)))
- {
- if (wordCheckBox.Checked)
- WordUp(file);
- else
- BasketCase(file);
- }
- if ( Indexes != null
- && Indexes.Count > 0
- && !find2) UpdateSelected();
- else if (!find2)
- MessageBox.Show(MCR.Nada);
- }
- void UpdateSelected()
- {
- var temp = new Collection<string>();//
- var hole = MCD.WholeList;
- foreach (var index in Indexes
- .Where(index => index >= 0
- && index < hole.Count))
- temp.Add(hole[index]);
- var t = 0;
- if (!MCT.P1Running) t = RunBlaster();
- MCD.Selected = temp;
- if (t < 9)
- {
- #region Design Note:
- // Psuedo Property.Changed |
- // Event, Triggers call |
- // to: SendSelected(below); v
- #endregion Design Note:
- IndexesFound = Indexes;// <-===<<
- Indexes.Clear();
- Validate();
- return;
- }
- if (!MCT.Testing) return;
- #region Permanent TestCode
- MessageBox.Show(string.Format(
- "{0}{1}{2}{3}{4}",
- MCR.TimeOut1, // 0
- Path.GetFileName( // 1
- MCT.GetRoot + MCR.BlasterApp),
- MCR.TimeOut2, // 2
- MCR.UpDate, // 3
- "\n\nCycles === " + t)); // 4
- #endregion
- }
- void SendSelected()
- {
- var ct = IndexesFound.Count;
- if (ct < 1) return;
- var sl = new Collection<string>();
- for (var i = 0; i < ct; ++i)
- sl.Add(MCD.WholeList[
- IndexesFound[i]]);
- // uses strings now no nums past here!
- var fn = Application.StartupPath +
- MCR.Selected;
- var args = MCD.GetArgs(fn, 0);
- args[3] = sl;
- if (!MMF.WriteStrings(args))
- MessageBox.Show(MCR.Err10);
- }
- static int RunBlaster()
- {
- #region testcode UpdateSelected
- //const string txt =
- // "Update Selected PB NOT" +
- // " Running, HIT!";
- //MessageBox.Show(txt);
- #endregion
- var file =
- MCT.GetRoot + MCR.BlasterApp;
- if (!File.Exists(file)) return 9;//\\
- var args = new[]
- { file, MCR.Blaster, MCR.Blaster };
- // breakpoint RunBlaster()
- MCT.RunApp(args);
- var t = 0;
- do Thread.Sleep(333);
- while (!MCT.P1Running && ++t < 9);
- Thread.Sleep(1212);
- return t;
- }
- void BasketCase(string file)
- {
- if (caseCheckBox.Checked)
- {
- if (file.Contains(searchBox.Text))//
- Indexes.Add(
- MCD.WholeList.IndexOf(file));
- }
- else // case not checked.
- {
- if (file.ToLower().Contains(
- searchBox.Text.ToLower()))
- Indexes.Add(
- MCD.WholeList.IndexOf(file));
- }
- }
- void WordUp(string file)
- {
- var fn = Path.
- GetFileNameWithoutExtension(file);
- if (string.IsNullOrEmpty(fn)) return;
- if (wordCheckBox.Checked)
- {
- if (searchBox.Text.Contains(fn))
- Indexes.Add(
- MCD.WholeList.IndexOf(file));
- }
- else // word not checked.
- {
- if (searchBox.Text.ToLower()
- .Contains(fn.ToLower()))
- Indexes.Add(
- MCD.WholeList.IndexOf(file));
- }
- }
- #endregion By Name Method Group
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- #region By Content Method Group
- string[] Lines { get; set; }
- void ContentOfCurrent(bool solo)
- {
- #region Note: Search4 var is reused
- // it has done it's initial job of
- // bringing in the search string to
- // Load. Once SearchForm is loaded
- // that value becomes searchBox.Text
- // & we can reuse Search2 (4) as the
- // filename to pass in at invokation.
- #endregion
- if (!solo) return;
- Search2 = MCD.Current;
- ContentOfCurrent();
- }
- bool ReadActualFile()
- {
- var fn = Search2;
- if (string.IsNullOrEmpty(fn)
- || !File.Exists(fn)) return false;
- try
- {
- var test = File.ReadAllLines(fn);
- if (test.Length < 1) return false;
- Lines = test;
- return true;
- }
- #region Catches
- catch (ArgumentException)
- { return false; }
- catch (PathTooLongException)
- { return false; }
- catch (DirectoryNotFoundException)
- { return false; }
- catch (IOException)
- { return false; }
- catch (UnauthorizedAccessException)
- { return false; }
- catch (NotSupportedException)
- { return false; }
- catch (SecurityException)
- { return false; }
- #endregion Catches
- }
- // This is also called from Loops.
- void ContentOfCurrent()
- {
- if ( MCD.Selected == null
- || MCD.Selected.Count < 1
- || !MCD.IsFile(Search2)
- || !ReadActualFile()
- || Lines == null
- || Lines.Length < 1) return;
- var file = Get1Record(Search2);
- if (file == null
- || file.Line == null
- || file.Line.Count < 1
- || string.IsNullOrEmpty(file.Name))
- return;
- Info.File.Add(file);
- }
- // -=[ Updated for Custom Type ]=-
- // v5.3.5.31 02-Aug-2019 by -JpE-
- Files Get1Record(string fn)
- {
- if (string.IsNullOrEmpty(fn)
- || !File.Exists(fn)) return null;
- var fileN = new Files(
- new Collection<Lines>())
- { Name = fn };
- var lines = GetLines();
- if ( lines!= null
- && lines.Star != null
- && lines.Star.Count > 0
- ) fileN.Line.Add(lines);
- return fileN;
- }
- Lines GetLines()
- {
- Lines line = null;
- var c = Lines.Length;
- for (var y = 0; y < c; ++y)
- {
- if (wordCheckBox.Checked)
- {
- // breakpoint wordCheckBox.Checked
- if (string.IsNullOrEmpty(
- Lines[y]) || !Lines[y].Equals
- (searchBox.Text)) continue;
- }
- else
- if (string.IsNullOrEmpty(Lines[y])
- || !Lines[y].Contains(
- searchBox.Text)
- ) continue;
- var test = FindHits(Lines[y]);
- if (test == null
- ||test.Count < 1
- ) continue;
- // Hits Found & Set, So is Y;
- line = new Lines(test)
- { LineNumber = y };
- }
- return line;//s;
- }
- // v5.4.5.32 07-Aug-2019
- Collection<int> FindHits(string line)
- {
- var case11 = GetCase();
- var search = searchBox.Text;
- var word12 = wordCheckBox.Checked;
- if (word12) search = string.Format(
- " {0} ", search);
- if (word12 && !line.Contains(
- search)) return null;
- var hits = new Collection<int>();
- var accu = 0;
- while (line.Length >=
- searchBox.Text.Length
- && line.Contains(search))
- {
- var xCoord = line.IndexOf(
- search, case11);
- if (xCoord < 0) continue;
- // Accumulator: Orig Line Positions.
- hits.Add(accu += xCoord);
- if (search.Length >
- line.Length) break;
- line = line.Remove(
- 0, xCoord + search.Length);
- }
- return hits;
- }
- StringComparison GetCase()
- {
- return caseCheckBox.Checked
- ? StringComparison
- // case sensitive
- .InvariantCulture
- : StringComparison
- // ignore case
- .InvariantCultureIgnoreCase;
- }
- #endregion By-Content Method Group
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- #endregion Instrumental Low Level Members
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- #region Higher Level Methods ALL use Instr
- #region Higher Level: Content Method Group..
- void ContentOfSelected()
- {
- if (MCD.Selected == null
- || MCD.Selected.Count < 1) return;
- ProcessContentList(MCD.Selected);
- }
- // ^v send Selected list to COC via
- void ProcessContentList(
- IEnumerable<string> files)
- {
- foreach (var fn in files.Where(
- fn => !string.IsNullOrEmpty(fn)
- && File.Exists(fn)))
- {
- Search2 = fn;
- ContentOfCurrent();
- }
- }
- // Called by both ME & PB as stated;
- // REM: MCD already arranged it, if;
- // ME calling edited is MCD.Current;
- // Selected = Files Open in Editor;
- // WholeList = if(ME) Favorites.sme;
- void ContentOfAll()
- {
- //Testing(); // Keep
- if (MCD.WholeList == null
- || MCD.WholeList.Count < 1) return;
- SearchAll = true;
- ProcessContentList(MCD.WholeList);
- }
- /* Keep Test Code */
- //static void Testing()
- //{
- //
- // const string
- // b = "Both",
- // e = "Editor",
- // c = "Cancel";
- // var s = "Error";
- // while (!s.Equals("Cancel"))
- // {
- // s = "Blaster";
- // var d = Choice();
- // switch (d)
- // {
- // case 1: s = b; break;
- // case 2: s = e; break;
- // case 4: s = c; break;
- // }
- // MessageBox.Show(
- // string.Format("{0} {1}",
- // "You Selected: ", s));
- // }
- //}
- #endregion Higher Level: Content-Members
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- #region Higher Level: By-Name Method Group.
- // Hit only by M.E. Indexes go 2 P.B. as
- // before, but via FileSystemWatcher,
- // and we'll also Send an ME-2nd
- // instance the ones found in Selected:
- // That will tab to them w/ proven code.
- void FindByName2()
- {
- FindByName1(true);
- CheckList();
- if ( Indexes == null
- || Indexes.Count < 1)
- { MessageBox.Show(MCR.Nada);
- return; }
- var opn = new Collection<string>();
- foreach (var file in from file in
- MCD.OpenFiles let idx= MCD.WholeList
- .IndexOf(file)where Indexes.Contains(
- idx) select file) opn.Add(file);
- UpdateSelected();
- // ^ SendSelected call now in there.
- if (opn.Count < 1) return;
- SendOpen2Me(opn);
- }
- // Sends filenames of Open with a
- // Match to a thread of ME.Process
- static void
- SendOpen2Me(IList<string> opn)
- {
- var fil = Application
- .StartupPath + MCR.EditorApp;
- if (opn == null
- || !File.Exists(fil)) return;
- opn.Insert(0, fil);
- var ary =
- MCT.Collection2Array(opn, 0);
- MCT.RunApp(ary);
- }
- // Checks for anything Open in ME
- // that's NOT in Managed, & adds it.
- // Append; Don't mess up the order
- // of indices as they're relied upon!
- static void CheckList()
- {
- foreach (var file in MCD.OpenFiles
- .Where(file => !MCD.WholeList
- .Contains(file)))
- MCD.WholeList.Add(file);
- }
- #endregion Higher Level: By-Name Members.
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- #endregion Higher Levels use Instrumentals.
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement