GlobalAccessSoftware icon

SearchForm4.cs

GlobalAccessSoftware | PRO | 10/04/19 12:27:27 AM UTC | 0 ⭐ | 1005 👁️ | Never ⏰ | []
C# |

8.22 KB

|

None

|

0 👍

/

0 👎

 
#region Top Part
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// MyCustomLibrary.SearchForm4.cs 
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// v5.4.5.33 12-Aug-2019 Split Out from SF3
// v5.4.5.34 17-Aug-2019 Solidification des5
// v5.4.5.35 20-Aug 27-Aug Extension mods
// v5.4.6.36 29-31 Aug Brings in Proven Code
// From SearchForm2 to organize better.
// Renumeration on basic building blocks.
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// 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.Linq;
using System.Threading;
using System.Windows.Forms;
 
// My Class Aliases:
using MCD = MyCustomLibrary.Dialogs;
using MMF = MyCustomLibrary.MemoryMapper;
using MCT = MyCustomLibrary.MyToolbox;
//using P3D = MyCustomLibrary.P3D;
using Wl2 = MyCustomLibrary.WorkList2;
 
// My Property Aliases:
using MCR = MyCustomLibrary
  .Properties.Resources;
using MCS = MyCustomLibrary
  .Properties.Settings;
 
#endregion Pop Tart
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
namespace MyCustomLibrary
{
  public partial class SearchForm
  {
#region SwitchBoard & Routing to Methods.
 
    int RunMyEditor()
    {
      var cnt = Info.File.Count + 1;
      var arg = new string[cnt];
      var inc = 0;
 
      arg[inc++] = Application.ExecutablePath;
      for ( ; inc < cnt; ++inc)
        arg[inc] =
          Info.File[inc-1].Name;
 
      // Always pass files,run'in or not.
      MCT.RunApp(arg);
 
      var t = 0;
      do Thread.Sleep(3333);
      while (!MCT.MeRunning
        && ++t < 9);
 
      return t;
    }
 
    void BlasterCalling()
    {
      var scope = scopeBox.SelectedIndex;
      if (scope.Equals(0))
        FindByName1();      // 001*
      else Info = GetNewInfo;
      if (scope.Equals(1))
        ContentOfSelected();// 2 to 5
      if (scope.Equals(2))
        ContentOfAll();     // 3 to 5
    }
    // * = it's an Instrumental Method Group
    // REM: Open is ME speak for Selected.
    void EditorCalling()
    {
      var scope = scopeBox.SelectedIndex;
      if (scope.Equals(0))
        FindByName2();      // 4 to 1
      else Info = GetNewInfo; // Fixt
      if (scope.Equals(1))
        ContentOfCurrent(true); // 005*
      if (scope.Equals(2))
        ContentOfSelected();// 6 to 5
      if (scope.Equals(3))
        ContentOfAll();     // 7 to 5
    }
#endregion SwitchBoard & Routing Methods
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region Designed for Custom Data Type
 
    // Custom Composite Data Type:
    WorkList2 GetNewInfo
    {
      get
      {
        return  new WorkList2(
          new Collection<Files>())
        {
          CaseCheck = caseCheckBox.Checked,
          WordCheck = wordCheckBox.Checked,
          FindThis  = searchBox .Text,
          Change2   = replaceBox.Text
        };
      }
    }
 
    void SomethingChanged(
      object sender, EventArgs e)
    {
      if (Beagle  == null) return;
      IndexesFound = Indexes
        = new Collection<int>();
      MatchesFound = Info = GetNewInfo;
      CancelSearch = true;
    } // eventTrigger ^ Send Msg to Editor.
 
    // This Method Group turns
    // Collection<WorkList2> WorkList
    // into a collection of strings.
    // v5.3.3.27 19-July-2019
    void SendMatches()
    {
      using (new Mutex(true,
        "SendMatchesMutex4"))
      {
        var fn = MCT.GetRoot + MCR.Matches;
        var args = MCD.GetArgs(fn, 0);
 
        args[3] = GetMatchesAsStrings2();
 
        if (!MMF.WriteStrings(args) &&
          !MCT.Skip && MCT.Testing)
            MessageBox.Show(MCR.Err11);
 
        // experimental locking.
        // Lock form until flow comes back.
        //Enabled = false;
      }
    }
 
    // NOTE FILE-Design Layout Doc:
    // 1st num on each Line is the Y,
    // everything else on that CS line
    // are it's Xs if many.
    // (CS = Comma Separated)
    // v5.3.5.30 30-Jul-2019
    // v5.4.5.33 12-Aug-2019
    // cstr = Collection of Strings.
    Collection<string>
      GetMatchesAsStrings2() // 4 the write
    {
      var cstr = new Collection<string>();//
      var line = string.Format("{0}, {1}",
        caseCheckBox.Checked,
        wordCheckBox.Checked);
      cstr.Add(line);
      line = string.Format("{0}, {1}",
        searchBox.Text, replaceBox.Text);
      cstr.Add(line);
      return AddFiles(cstr);
    }
 
    // From WorkList2 to string collection.
    // Rem: It comes partly setup. (above)
    Collection<string> AddFiles(
      Collection<string> cstr)
    {
      if (cstr == null
        ||cstr.Count < 1) return null;
 
      foreach (var f in MatchesFound.File)
      {
        // File Level:
        cstr.Add(f.Name);
        const string c = ", ";
 
        foreach (var l in f.Line)
        {
          // Line Level:
          var xs ="";
          //  ^ our X-Coord accumulator.
 
          foreach (var n in l.Star)
          {
            // Character Number Level:
            if (!string.IsNullOrEmpty(xs
              )) xs += c; // appends commas.
            xs += string.Format("{0}", n);
          }
          cstr.Add(string.Format(
            "{0},{1}", l.LineNumber, xs));
        }
        // Special Between Files Marker.
        cstr.Add(MCT.Special);
      }
      SearchAll = false; // <-===<<
 
      return cstr;
    }
    bool SearchAll { get; set; } // <-===<<
    
#endregion Designed for Custom Data Type
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region RTB.Text Editing desRev4
 
    // v5.4.5.34
    void ExtractUnOpened()
    {
      var nums = new Collection<int>();
      foreach (var i in Info.File
        .Select(f => CheckName(f.Name))
          .Where(i => i >= 0))
          nums.Add(i);
      if (nums.Count > 0
        ) ExtraIndexes(nums); // <-===<<
      SearchAll = false;
    }
 
    // Gets Matches that aren't Open
    // & Grabs Indexes for SendSelected();//
    // v5.4.5.33 12-Aug-2019 by -JpE-
    static int CheckName(string fn)
    {
      var num = -1;
 
      if (!MCD.Selected.Contains(fn))
        num = MCD.WholeList.IndexOf(fn);
 
      return num;
    }
 
    /********************************/
    // Handles User's Choice:
    // (buttons from Left to Right)
    //*******************************/
    // Choice = 1: BOTH!
    // Choice = 2: MyEditor Only.
    // Choice = 3: Blaster  Only. 
    // Choice = 4: Cancel Operation.
    //*******************************/
    // 3: Is Default Accept Button. CF
    /********************************/
    void ExtraIndexes(Collection<int> i)
    {
      switch (Choice())
      {
        case 1: Send2Blaster(i, 1); break;
        case 3: Send2Blaster(i, 3); break;
      }
    }
 
    static int Choice()
    {
      using (var cf = new ChoiceForm())
      {
        cf.ShowDialog();  //   ^^^^
        return cf.Choice; //   ||||
      }
    }
 
    // Assign what we got and let our
    // PropertyChanged call SendSelected();
    void Send2Blaster(
      Collection<int> n, int i)
    {
      // breakpoint Send2Blaster();
      if (i > 1 && SearchAll && Info != null
        && Info.File != null && Info
        .File.Count > 0) RemoveFromInfo(n);
      
      IndexesFound = n; // <-= event trigger
    }
 
    private void RemoveFromInfo(
      ICollection<int> n)
    {
      // testwell RemoveFromInfo();
      if ( n == null
        || n.Count < 1
        || Info == null
        || Info.File == null
        || Info.File.Count < 1) return;
 
      var f = Info.File;
      var c = f.Count;
      var m = n.Count;
 
      foreach (var t in n.Select(
        i => MCD.WholeList[i]))
        for (var ii = 0; ii < c; ++ii)
          if (t.Equals(f[ii].Name))
            Info.File.RemoveAt(ii);
 
      // breakpoint RemoveFromInfo();
      if (c-m != Info.File.Count)
        throw new ArgumentException(
          "Error in Remove From Info.");
    } // Sanity Check ^ by Justin Kase:
 
#endregion RTB.Text Editing
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
  }
}

Comments