GlobalAccessSoftware icon

PrintForm1.cs

GlobalAccessSoftware | PRO | 04/26/19 09:42:29 AM UTC | 0 ⭐ | 598 👁️ | Never ⏰ | []
C# |

33.02 KB

|

None

|

0 👍

/

0 👎

 
#region Top Part
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// PrintForm1.cs 17-Dec-17 v1.1.4.27
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// Run This On a Worker Thread
// so it's independent of Smesa
// as an App within an App.
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// Brought to PrintBlaster NameSpace
// v2.3.7.28 21-Jan-2018 (Beginning)
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// v2.5.9.31 09-Feb-2018 Isolated &
// Ready for Further Development!
// v3.2.3.47 05-Apr-2018 ^ Beginning
// v3.2.4.47 09 Near Total Concept!
// v3.3.4.48 18-Apr-2018
// v4.3.5.49 22-Apr-2018 Integrated.
// v4.3.5.51 Mmf2-Data Mechanisms.
// v4.3.5.52 9-May-18 Up/Down Move.
// v4.4.5.53 Mapped in to Lock Out.
// (c) John P. Edwards 20-May-2018
// Revision4.5.7.54 FileWatcher impl.
// v4.5.7.57nobadges Brings in MCD stuff.
// and MyToolbox 09-Jun-18 
// v4.5.7.57nobagiac 22-Jun-2018 Rescued!
// v4.5.7.58 Abouts Perfected 02-Jul
// v4.5.7.58nobloop 03-Jul-2018
// Integrating with MyCustomDialogs
// v4.5.7.58nobluff 05-Jul-2018 Viewer,
// About, and Skip Togglerized. 4 Kinds!
// v4.5.8.60 18-Jul-18 Shared Info!
// v4.5.8.60 23-Jul-18 FULLY TESTED! 26-Jul
// v4.5.8.61 04-Aug Integration w/ Shared.sme
// v4.5.9.63 Omega Plan
// v4.5.9.63 15-Aug-2018 Complete & TestsWell.
// v4.5.9.64 21-Aug Fixed and finalized.
// v4.6.9.65 29-Aug-2018 Viewer Rapid-Fire!
// v4.6.9.67 06-Sep-2018 Shared, Skip, Testing
// v4.6.9.69 17- " " Perfected PathPb & FSWs!
// v4.7.0.70 18-" " Assy Thread Safe & IO Safe.
// v4.7.0.71 19-Sep About Colors.
// v4.7.0.72 21-"" "" Added Invert List Tool.
// v4.7.1.73 23-Sep Perfected OpenFolder mods.
// v4.7.1.75 28 " " PageSetup1 & 2 ProtoTypes.
// v4.7.1.76 30-Sep MCT.SaveList & GetList mods.
// v4.8.0.76 30-Sep MCT.SaveList & GetList mods.
// v4.8.1.77 03-Oct Proves New Design Model!
// v4.8.1.78 08-Oct Sort List Option.
// v4.8.2.81 20-Oct Switch to Editor.
// v4.8.3.84 06-Nov-2018 Myriad Mods.
// v4.9.4.90 27-Nov-2018 ReadRemovals() and
// GetSelectedIndex() integration completed.
// NOTE: See calls to GetSelectedIndex();
// v4.9.4.92 04-Dec-2018 Killed.sme Mods.
// v4.9.5.94 13-Dec-2018 ME2PB Killed 1 & 2
// v4.9.5.96 31-Dec-2018 Integrate Prototype.
// v5.0.6.03 23-Mar-2019 Alphabetize overlook
// v5.1.6.07 19-Apr-2019 SetPaths Assurances.
// v5.1.7.09 24-Apr-2019 Debugged & Tested.
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Windows.Forms;
 
// Custom References:
using MyCustomLibrary;
using MyEditor;
 
// Class Aliases:
using MCD = MyCustomLibrary.Dialogs;
using MCT = MyCustomLibrary.MyToolbox;
using SNM = MyCustomLibrary.SafeNativeMethods;
 
// Property Aliases:
using PFR = PrintBlaster.Properties.Resources;
using PFS = PrintBlaster.Properties.Settings;
 
namespace PrintBlaster
{
  public partial class PrintForm1 : Form
  {
    // See PrintFormHeader.cs for Globals:
 
    /// <summary> 1st Instance only
    /// Class Constructor. (1 of 2)
    /// Ist Instance here, and 2nd
    /// Instance is the only other
    /// Class Constructor. v4.5.8.61
    /// (c) 02-Aug-2018 by -JpE-
    /// For G.A.S.I.T.
    /// </summary>
    public PrintForm1() // Class Constructor 1 of 2
    {
      WaitCursor();
      Args = Environment
        .GetCommandLineArgs();
      Detect();
      SetPaths();
      ClearMarkers();
      if (Which > 0 && Which < 7)
      { // When Sent by MyEditor
        // & a 1st instance.
        Switch1(Which);
        Close();
      }
      else // Normal App Start.
        InitializeComponent();
    }
#endregion Top Part
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region Paths and Mmf Magic
 
    // First Instance Only.
    private void SetPaths()
    {
      // Assure variable integrity.
      var root = MCT.GetRoot;
      if (string.IsNullOrEmpty(root)
       || !Directory.Exists(root)) throw
         new ArgumentException(PFR.Err7);
      var myAp = root + PFR.PrintApp;
      // Ascertain the PrintBlaster Path.
      PbPath = File.Exists(myAp)
        ? myAp : Args[0];
      if (File.Exists(PbPath))
        WriteShared.AppRoot =
          Path.GetDirectoryName(PbPath);
      // Ascertain "MyEditor.exe" Path.
      GetEdPath();
      GetMappedPathAndWrapUp(root);
      if (!string.IsNullOrEmpty(PbPath)
        && File.Exists(PbPath))
          Args[0] = PbPath;
    }
 
    private void
      GetMappedPathAndWrapUp(string root)
    {
      var file = root + PFR.MMF1;
      // Ascertain the Editor.sme Path.
      if (File.Exists(file))// ^ (MMF1)
        PFS.Default.PathEditor = file;
      else GetEditorPath();
      // do it ^ old school otherwise!
      PFS.Default.PathSetup =
        root + PFR.PageSetup;
      PFS.Default.PathForm  =
        root + PFR.Form;
      PFS.Default.Save();
      Data = GetData2();
      WriteSetupPath();
    }
    
    // First Instance Only.
    // Get "Editor.sme" Path from file.
    private void GetEditorPath()
    {
      var docu = MCT.GetDocFolder;
      var path = docu + PFR.EditorFile;
      if (File.Exists(path))
      {
        path = ReadPath(path);// reused var
        if (!string.IsNullOrEmpty(path)
          && File.Exists(path))
            PFS.Default.PathEditor = path;
        else GetOldSchool();
      }
      else GetOldSchool();
    }
 
    // First Instance Only. Last Try to
    // Get "Editor.sme" Path another way.
    private void GetOldSchool()
    {
      string answ = "", fl = PFR.MMF1;
 
      var dir = Path
        .GetDirectoryName(PbPath);
      if (!string.IsNullOrEmpty(dir)
        && Directory.Exists(dir)
        && File.Exists(dir+fl))
          answ = dir+fl;
 
      dir = Path.GetDirectoryName(EdPath);
      if (string.IsNullOrEmpty(answ))
        if (!string.IsNullOrEmpty(dir)
          && Directory.Exists(dir)
          && File.Exists(dir+fl))
            answ = dir+fl;
 
      dir = Path.GetDirectoryName(
        PFS.Default.PathEditor);
      if (string.IsNullOrEmpty(answ))
        if (!string.IsNullOrEmpty(dir)
          && Directory.Exists(dir)
          && File.Exists(dir+fl))
            answ = dir+fl;
 
      if (!string.IsNullOrEmpty(answ)
        && File.Exists(answ))
          PFS.Default.PathEditor = answ;
    }
 
    #region Data Doc
    // Args[0] = path   // (PB\Bin\Release)            
    // Args[1] = size   // (0 for autosize)
    // Args[2] = offset // (0 for autosize)
    // Args[3] = 1;     // Flip Byte Switch ON!
    // Args[4] = true;  // read sent msg.
    // Args[5] = "mmf2";// unique name.
    // Args[6] = true;  // delete after read.
    // Args[7] = view length from offset. (Optional)
    // ^ defaults to 0L which goes to the end of size.
    #endregion
 
    // First Instance Only.
    public static object[] GetData2()
    {
      var path = PFS.Default.PathSetup;
 
      return new object[]
      {
        path, 1, 0, new
        Collection<byte> {1}, true,
        Path.GetFileNameWithoutExtension(
        path), true
      };
    }
    
    // First Instance Only.
    private static void WriteSetupPath()
    {
      if (string.IsNullOrEmpty(
        PFS.Default.PathSetup)) throw
          new ArgumentException(PFR.Err5);
      var path = MCT.GetDocFolder + 
        PFR.PathSetup;
      var file = PFS.Default.PathSetup;
      var data = new[]
      {
        file, "1", "0", "null", "true",
        Path.GetFileNameWithoutExtension(
          file), "true"
      };
      File.WriteAllLines(path, data);
      File.SetLastAccessTime(
        path, DateTime.Now);
    }
 
    // First Instance Only.
    // Ascertain "MyEditor.exe" Path.
    // typical ^v Quickie for All.
    // v5.1.6.07 19-Mar-2019
    private void GetEdPath()
    {
      var d = MCT.GetRoot;
      var f = d + PFR.EdApp;
      // New & Improved Quick Way.
      if (!string.IsNullOrEmpty(d)
        && Directory.Exists(d)
        && File.Exists(f)) EdPath = f;
      else // else do it the old way.
      { // Note ReUsing Var f
        f = MCT.GetDocFolder + PFR.PathMe;
        if (File.Exists(f))
          EdPath = ReadPath(f);
        // try ^ reading it.
        // or...
        if (string.IsNullOrEmpty(EdPath)
            || !File.Exists(EdPath)
            && (!string.IsNullOrEmpty(Args[0])
            && File.Exists(Args[0])))
          EdPath = Args[0];
      }
    }
 
    public static string ReadPath(string fn)
    {
      if (string.IsNullOrEmpty(fn)
        || !File.Exists(fn)) return "";
      var file = File.ReadAllText(fn);
      if (string.IsNullOrEmpty(file)
        || !File.Exists(file)) return "";
      return file;
    }
#endregion Paths and Mmf Magic
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region Load, Watcher, B2F, Closing
 
    private void PrintLoad
      (object sender, EventArgs e)
    {
      Size     = PFS.Default.PF_Size;
      Location = PFS.Default.PF_Loca;
      // v4.9.4.90 27-Nov-2018 -JpE-
      ToggleLastAccessSort.Checked   =
        PFS.Default.SortByAccess;
      ToggleSortAlphabetical.Checked =
        PFS.Default.SortAlphabet;
      // REM: ListBoxLoad Checks Favs.
      ListBoxLoad();
      RoadKill(); // <-= Hook v4.9.5.95!
      BtfWatcher = new FileSystemWatcher();
      SetupBtfWatcher();
      SkipWatcher = new FileSystemWatcher();
      SetupSkipWatcher();
      SharedWatcher = new FileSystemWatcher();
      SetupSharedWatcher();
      KilledWatcher = new FileSystemWatcher();
      SetupKilledWatcher();
      SkipToggle.Checked = MCT.Skip;
      if (ReadSharedData()) GetProperties();
      SelectedChanged("PrintLoad", e);
      ArrowCursor();
      GetFileCount();
      listBox1.SelectedIndexChanged +=
        SelectedChanged;
      TestCodeVisibility();
    }
 
    private void TestCodeVisibility()
    {
      TestCode1.Visible  =
      TestCode2.Visible  =
      TestCode3.Visible  =
      TestCode4.Visible  = MCT.Testing;
    }
 
    // ReUsed elsewhere now too.
    // v4.5.9.63 17-Aug-2018 -JpE-
    private void GetProperties()
    {
      ForeColor          = _formFore;
      BackColor          = _formBack;
      listBox1.ForeColor = _foreColor;
      listBox1.BackColor = _backColor;
      listBox1.Font      = _boxFont;
      Validate();
    }
 
    private void SetupBtfWatcher()
    {
      BtfWatcher.NotifyFilter =
        NotifyFilters.FileName;
      BtfWatcher.InternalBufferSize  = 8192;
      BtfWatcher.EnableRaisingEvents = false;
      // Setup File System Watcher:
      BtfWatcher.Path = // for Mapped File.
        Path.GetDirectoryName(
          PFS.Default.PathForm);
      BtfWatcher.Filter = Path
        .GetFileName(
          PFS.Default.PathForm);
      // Create Eventhandler...
      BtfWatcher.Created += BtfEventHandler;
      BtfWatcher.EnableRaisingEvents = true;
    }
    
    private void BtfEventHandler(
      object sender, FileSystemEventArgs e)
    {
      #region testcode
      //var txt = listBox1.InvokeRequired
      //  ? "Invoke Required."
      //  : "Invoke NOT Required!";
      //txt = "PrintForm Class " + txt;
      //MessageBox.Show(txt); //PFR.BtfText);
      #endregion
      if (listBox1.InvokeRequired)
        Invoke(new Invoker1(
          Bring2Front));
      else
        Bring2Front();
    }
    
    // Bring UI window (hWnd) to front
    // using SNM.B2F. Ref it.
    private void Bring2Front()
    { 
      BtfWatcher.EnableRaisingEvents = false;
      SNM.B2F(Process
        .GetCurrentProcess()
          .MainWindowHandle);
      // v Thread Safe / IO Safe.
      MemoryMapper.ReadBytes(GetData3());
      // ^ Reset trigger by..| effectively
      // | deleting it with: data[6] = true;
      BtfWatcher.EnableRaisingEvents = true;
    }
 
    private static object[] GetData3()
    {
      var p3 = PFS.Default.PathForm;
      #region Release Test Code
      //MessageBox.Show(string.Format(
      //  "p3 is {0}", p3));
      #endregion
      var nm = Path. // } to simplify.
        GetFileNameWithoutExtension(p3);
      // Then just return the object array.
      return new object[]
      {
        p3, 1, 0, new Collection<byte> {1},
        true, nm, true
      };
    }
 
    private void PrintFormClosing(
      object sender, FormClosingEventArgs e)
    {
      if (MyPrintDoc != null)
        MyPrintDoc.Dispose();
      PFS.Default.PF_Size = Size;
      PFS.Default.PF_Loca = Location;
      ListBoxSave();
      UpdateFavorites();
      PFS.Default.SortByAccess =
        ToggleLastAccessSort.Checked;
      PFS.Default.SortAlphabet =
        ToggleSortAlphabetical.Checked;
      PFS.Default.Save();
      var fn = WriteShared.AppRoot
        + PFR.PB;
      if (File.Exists(fn))
        File.Delete(fn);
    }
#endregion Load, Watcher, B2F, Closing
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region Detect if Smesa sent.
 
    /// <summary> Detect Task Selected from Smesa
    /// My Editor Project has sent a special
    /// request for a particular Form
    /// from This Project. PrintForm isn't shown
    /// unless it was an actual Run from Smesa Class
    /// See Smesa PrintItemHandler in Smesa Options.
    /// </summary>
    private void Detect()
    {
      if (Args.Length < 3) return;
      // Which = 0; ^
      Which = Args[1].Contains(Key1)
        ? 7 : Detect(Args);
    }
 
#region Shared IntraProcess
 
    // Critical for both instances. <-=
    // Must Be Static & Hard Coded.
    // ThreadSafe \ ProcessSafe \ IOSafe
    private static int Detect(
      IList<string> args)
    {
      // Print v v Preview is Default.
      var item = 1;
      PbMutex.WaitOne();
      // Defaults to Preview.
      var sent = args[1];
      // File>>Page Setup
      if (sent.Contains("Page")) item = 2;
      // File>>Print File or Selection
      if (sent.Contains("This")) item = 3;
      // File>>Print Font & Color v5.1.7.09
      if (sent.Contains("Font")// 24Apr2019
       && sent.Contains("Color"))item = 5;
      // Code Set Here. Legend Also.
      if (args.Count() > 3) item = 3;
      // Batch handler is^above at 3;
      #region Release TestCode.
      //const string can =
      //  "Font request made" +
      //  " it to Detect(IList);";
      //if (item.Equals(5))
      //  MessageBox.Show(can);
      #endregion
      PbMutex.ReleaseMutex();
      return item;
    }
#endregion Shared IntraProcess
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
    private void Switch1(int which)
    {
      ArrowCursor();
      switch (which)
      {
        case 1: PrintPreview1();
          break;
        case 3: PrintThis1();
          break;
        case 5: FontSelect1();// New v5.1.7
          break;
        default: PageSetup1();
          break;
      }
    }
 
    private void PrintFormKeyDown(
      object sender, KeyEventArgs e)
    {
      if (e.KeyData.Equals(Keys.Escape))
        Close();
    }
#endregion Detect if Smesa sent.
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region File Menu Items
 
    private void AddFilesClick(
      object sender, EventArgs e)
    {
      // Easy using existing code to Select files.
      Smesa.SetDirectory();
      var dir = Directory.GetCurrentDirectory();
      var fnm = Smesa.GetDefaultFileName(0);
      if (listBox1.SelectedItems.Count > 0)
      {
        fnm = listBox1.SelectedItems[0].ToString();
        dir = Path.GetDirectoryName(fnm);
        // Justin Case
        if ( string.IsNullOrEmpty(fnm)
          || string.IsNullOrEmpty(dir)
          || !File.Exists(fnm)
          || !Directory.Exists(dir))
          return;
      }
      var args = new[]{ fnm };
      args = Smesa.FileNameGet(args, dir);
      // if viable, add to the top of list.
      if (args == null
        || args.Count() == 1
        && args[0] == fnm) return;
      foreach (var file in args
        .Where(file => !listBox1
          .Items.Contains(file)))
            listBox1.Items.Insert(0, file);
      GetFileCount(); // NOTE: ^ inversion;
      UpdateFavorites();
    }
 
    private void FontSelectClick(
      object sender, EventArgs e)
    { FontSelect1(); }
 
    private void PageSetupClick(
      object sender, EventArgs e)
    { PageSetup1(); }
 
    // convert selection / collection
    // to Args String Array and let
    // PrintPreview(); Handle the rest.
    private void PreviewClick(
      object sender, EventArgs e)
    {
      if (listBox1.SelectedItems
        .Count < 1) return;
      GetArgs(sender);
      PrintPreview1();
    }
 
    /// <summary>
    /// convert selection / collection
    /// to Args String Array and let
    /// PrintThis(); Handle the rest.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void PrintThisClick(
      object sender, EventArgs e)
    {
      if (listBox1.SelectedItems
        .Count < 1) return;
      GetArgs(sender);
      PrintThis1();
    }
 
    private void GetArgs(object sender)
    {
      var l = listBox1
        .SelectedItems.Count + 2;
      Args = new string[l];
      Args[0] = PbPath;
      Args[1] = sender.ToString();
      for (var i = 2; i < l; ++i) Args[i] =
        listBox1.SelectedItems[
          i - 2].ToString();
    }
 
    private void ExitClick(
      object sender, EventArgs e)
    { 
      if(MCD.YesNoDialog(PFR.Exit)) Close();
    }
#endregion File Menu Items
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region Edit Menu Items
 
    #region NOTE:
    // Several of the Main Menu Items are simply linked to the equivalent Context Menu Item. (And vise-versa)
    #endregion
 
    private void SelectAllClick(
      object sender, EventArgs e)
    {
      var c = listBox1.Items.Count;
      listBox1.ClearSelected();
      for (var i = c-1; i > -1; --i)
        listBox1.SetSelected(i, true);
    }
 
    // Send this selection to
    // (or open) Smesa via CommandLine.
    // uses existing 2nd Instance & MMF.
    // a simple call to
    // MCL.MyToolbox.RunApp(); But...
    // ...make sure the args are right.
    private void AddToEditorClick(
      object sender, EventArgs e)
    {
      if (string.IsNullOrEmpty(EdPath)
        || !File.Exists(EdPath)
        || !MCD.YesNoDialog(PFR.Edit))
        return;
      // else 1 extra for EdPath itself.
      var count = 1 + listBox1
        .SelectedItems.Count;
      var args  = new string[count];
      var i = 0;
      args[i++] = EdPath;
      for ( ; i < count; ++i)
        args[i] = listBox1
          .SelectedItems[i - 1]
            .ToString();
      WaitCursor();
      MCT.RunApp(args);
      Thread.Sleep(1000);
      ArrowCursor();
    }
 
    /// <summary> Flip byte 8190 to 1
    /// in Watched File:
    /// "Editor.sme" on AppRoot dir
    /// v4.8.2.81 23-Oct-2018
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Switch2Editor(
      object sender, EventArgs e)
    {
      if (!MCD.YesNoDialog(
        PFR.GoEdit, "", 1)) return;
      if (MyEditorIsRunning())
      {
        var f = Path.GetDirectoryName(
          EdPath) + PFR.MMF1;
        var n = Path
          .GetFileNameWithoutExtension(f);
        var args = new object[]
        {
          f, Smesa.EditorSize,
          Smesa.Offset1 -2,
          new Collection<byte> {1},
          false, n, false
        };
        if (!MemoryMapper
          .ReverseWriteBytes(args))
            MessageBox.Show(PFR.Failed);
      }
      else Process.Start(EdPath);
    }
 
    private bool MyEditorIsRunning()
    {
      return File.Exists(
        Path.GetDirectoryName(
          EdPath) + PFR.ME);
    }
#endregion Edit Menu Items
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region View Menu Items
 
    // See PrintForm3.cs
 
    // v4.7.1.73 23-Sep-2018
    private void OpenFolderClick(
      object sender, EventArgs e)
    {
      var list = listBox1.SelectedItems;
      if (list.Count < 1) return;
      if (!MCD.YesNoDialog(PFR.Open)) return;
      var launched = new Collection<string>();
      var was  = MCT.Skip;
      MCT.Skip = true;
      foreach (var dir in list.Cast<string>()
        .Select(Path.GetDirectoryName).Where(
        dir => !string.IsNullOrEmpty(
          dir) && Directory.Exists(dir)
          && !launched.Contains(dir)))
      { launched.Add(dir);
        MCT.OpenFolder(dir); }
      MCT.Skip = was;
    }
 
    private void ShowInViewerClick(
      object sender, EventArgs e)
    {
      if (listBox1.SelectedItems.Count < 1
        || string.IsNullOrEmpty(PbPath)) return;
      if ( !MCD.YesNoDialog(PFR.Show)) return;
      var dir = Path.GetDirectoryName(PbPath);
      if (string.IsNullOrEmpty(dir)
        || !Directory.Exists(dir)) return;
      var app = dir + PFR.Sme;
      if (!File.Exists(app)) return;
      // And Send to ShowMeForm
      SharedWatcher // v4.8.3.84
        .EnableRaisingEvents = false;
      foreach (string file in
        listBox1.SelectedItems)
      { MCT.RunApp(file, string.Format(
          "Viewing: {0}", file), app);
        Thread.Sleep(800); }
      SharedWatcher // ^ wait a sec.
        .EnableRaisingEvents = true;
    }
#endregion View Menu Items
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region Tools Menu Items
 
    private void AboutClick(
      object sender, EventArgs e)
    {
      var args = new[]
      {
        AssemblyTitle,
        AssemblyProduct,
        AssemblyVersion,
        AssemblyCopyright,
        AssemblyCompany,
        PFR.About
      };
      var colors = new Collection<Color>
      {
        listBox1.ForeColor,       
        listBox1.BackColor,            
        ForeColor, BackColor
      };
      MCD.AboutApp(colors, args);
    }
 
    /// <summary> Uses a dummy file-exists
    /// "flag" as a Universal Boolean:
    /// AppRoot + "skip.sme" esta nada.
    /// Exists == true : Not == false;
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void ToggleSkip(
      object sender, EventArgs e)
    {
      var skip = MCT.Skip;
      if (!MCD.YesNoDialog(PFR.Toggle))
        SkipToggle.Checked = skip;
      else // Test code that...
      {   //  ...became a Feature!
        Thread.Sleep(250);
        MCT.Skip = !skip;
        #region NOTE:
        // ^ This tiny lil guy triggers
        // the PBF2.SkipEventHandler and thus
        // Resets the SkipToggle.Checked value.
        // Even if Smesa.Preferences made the change!
        #endregion
      }
    }
 
    private void InvertListClick(
      object sender, EventArgs e)
    {
      if (!MCD.YesNoDialog(
        PFR.Invert)) return;
      var slct = listBox1.SelectedItems;
      var temp = new Collection<object>();
      foreach (var item in listBox1.Items)
        temp.Add(item);
      var last = temp.Count  -1;
      listBox1.SelectedItems.Clear();
      listBox1.Items.Clear();
      for (var i = last; i > -1; --i)
        listBox1.Items.Add(temp[i]);
      foreach (var file in slct)
        listBox1.SelectedItems.Add(file);
    }
#endregion Tools Menu Items
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region Assembly Attribute Accessors
 
    public static string AssemblyTitle
    {
      get
      {
        var attributes = Assembly.GetExecutingAssembly()
          .GetCustomAttributes(typeof(
            AssemblyTitleAttribute), false);
        if (attributes.Length > 0)
        {
          var titleAttribute =
            (AssemblyTitleAttribute)attributes[0];
          if (!string.IsNullOrEmpty(titleAttribute.Title))
            return titleAttribute.Title;
        }
        return Path
          .GetFileNameWithoutExtension(Assembly
            .GetExecutingAssembly().CodeBase);
      }
    }
 
    public static string AssemblyVersion
    {
      get
      {
        return Assembly.GetExecutingAssembly()
          .GetName().Version.ToString();
      }
    }
 
//    public string AssemblyDescription
//    {
//      get
//      {
//        var attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
//        return attributes.Length == 0 ?
//          "" : ((AssemblyDescriptionAttribute)attributes[0]).Description;
//      }
//    }
 
    public static string AssemblyProduct
    {
      get
      {
        var attributes = Assembly.GetExecutingAssembly()
          .GetCustomAttributes(typeof(
            AssemblyProductAttribute), false);
        return attributes.Length == 0 ?
          "" : ((AssemblyProductAttribute)attributes[0]).Product;
      }
    }
 
    public static string AssemblyCopyright
    {
      get
      {
        var attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
        return attributes.Length == 0 ?
          "" : ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
      }
    }
 
    public static string AssemblyCompany
    {
      get
      {
        var attributes = Assembly.GetExecutingAssembly()
          .GetCustomAttributes(typeof(
            AssemblyCompanyAttribute), false);
        return attributes.Length == 0 ?
          "" : ((AssemblyCompanyAttribute)attributes[0]).Company;
      }
    }
#endregion  Assembly Attribute Accessors
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region ALL TestCode Only Below Here
 
    private void TestCode4Click(
      object sender, EventArgs e)
    {
      const string
        cancel  = "Full Removal Cancelled!",
        remove  = "Selected Files Removed.";
      var which = !MCD.YesNoDialog(
        PFR.ReSet, PFR.ReSetTtl, 1)
          ? cancel : remove;
      MessageBox.Show(which);
 
      //const string txt =
      //  "For Lease or Let #4.";
      //MessageBox.Show(txt);
    }
 
    private void TestCode3Click(
      object sender, EventArgs e)
    {
      const string txt =
        "For Lease or Let #3.";
      MessageBox.Show(txt);
    }
 
    private void TestCode2Click(
      object sender, EventArgs e)
    {
      // Testing Killed1.sme & Killed2.sme
      // EventHandler and Kill Later.
      var d1 = listBox1.SelectedItems;
      var df = new StringCollection();
      foreach (string s in d1) df.Add(s);
 
      // Test itself on Killed1 Handling.
      var fn = WriteShared
        .AppRoot + PFR.KillNow;
      if (File.Exists(fn)) File.Delete(fn);
      var ar = MCT.GetCommonArgs(fn,
        new Collection<string>(
          df.Cast<string>().ToList()));
      if (!MemoryMapper
        .WriteStrings(ar)) throw new
          FileLoadException(
            "Not Written!");
 
      // Test itself on Killed2 Handling.
      Thread.Yield();
      WriteShared.KillLater(df);
      if (File.Exists(fn)) File.Delete(fn);
 
      //const string txt =
      //  "For Lease or Let #2.";
      //MessageBox.Show(txt);
    }
 
    // MemoryMapper Class TesterCode;
    private void TestCode1Click(
      object sender, EventArgs e)
    {
      //\\//\\//\\//\\
      //  Strings \\//
      //\\//\\//\\//\\
 
      var strings=
        new Collection<string>
        {"Testing strings, test test test.","Hello World!","String 3","4","string 5","6 string","string 7","The 8th String","The bottom of the 9th!","10th string","string #11","thfsahf fshfeeifj jkljfksdjkjf ieiiif jfkdkls l\n\nhahahah love it akfjsakjei sjk hskshf fjksdhfhue\n\nHeheh just testing a long string here.","snowball","testcode","15","16 string","string 17","string 18","19th string","Tada string #20!\nskjdfsk fjfidowijwei fkdsjk fjkdsjie jfkdjs;al;sjfj jfijw0ew slfklks'; jfdsasp[df fdks jgjkszllkshfhdhskh hfjksh hfjs sksdhf jhsue hfjdsk fhue\n\njskkjfj jfidosijfk jlksdjkhf -JpE-"};
 
      var dir = Path.GetDirectoryName(
        Data[0].ToString());
      var args=
        new object[]
        { dir + "\\testStrings.sme",
          0, 0, strings, true, "testMmf", true};
      // Faked args & strings ^^^^^^^^^^^^^^
      if (File.Exists(args[0].ToString()))
        File.Delete(args[0].ToString());
      // So now we can test it
      if (MCD.YesNoDialog(
        "Test Write Strings()?"))
          MemoryMapper.WriteStrings(args);
      if (MCD.YesNoDialog(
        "Test Read Strings()?") )
      { var coun = 0;
        var read = MemoryMapper.ReadStrings(
          args).ToList();
        read.Sort(); // Watch This Result!
        MessageBox.Show(read.Aggregate(
          "",(current,s)=>current+string.Format(
            "String#{0}: {1}\n",++coun,s)));}
 
 
      //\\//\\//\\//
      //  Bytes //\\
      //\\//\\//\\//
 
      args[0] = dir + "\\testBytes.sme";
      if (File.Exists(args[0].ToString()))
        File.Delete(args[0].ToString());
      args[3] = new Collection<byte>
        {1,2,3,4,50,255,128,43,17,14,4,21,
          27,120,254,0,253,0,99,2,25};
      args[5] = "ByteSwitch";
      if (MCD.YesNoDialog(
        "Test out Write Bytes?"))
          MemoryMapper.WriteBytes(args);
      if (MCD.YesNoDialog(
        "Test out Read Bytes?"))
      {
        var x = MemoryMapper
          .ReadBytes(args).ToList();
        x.Sort();
        var t = x.Aggregate("",
          (current, b) => current +
            string.Format("{0}, ", b));
        t = t.Remove(t.Length-2);
        t = t.Normalize();
        MessageBox.Show(string.Format(
          "Sorted List of Bytes:" +
          " (0-255 only)\n\n{0}", t ));
      }
 
 
      //\\//\\//\\//\\
      //   Int64  \\//  <-= Holds so much More!
      //\\//\\//\\//\\
 
      args[0] = dir + "\\testPointers.sme";
      if (File.Exists(args[0].ToString()))
        File.Delete(args[0].ToString());
      args[5] = "mmf17";
      args[3] = new List<Int64>
      {
        39876, -2134598, 398764231087432, 0, 1,
        -11, 64, 62, 3600, 18, 16, 14, 15, 13,
        -19, 21, 1956, 1234567890, 128, 9001,
        9002, -69, 75, 41, 2, 56, 3, -56, -2,
        11, 13298436567129, -10, 12, 29, -17,
        10, -100200300400500, 17, 37, 2018,
        97, -1, 98, 96, -3451065487, -3, -4, 111
      };
      #region Noted Details.
 
      // Fake data for testing ^ ^ ^
      // ulong max value 18,446,744,073,709,551,615!
      // That's: 18 quintillion, 446 quadrillion,
      // 744 trillion, 73 billion, 709 million,
      // 551 thousand, 615. (20 digits)
      //Int64() methods range is:
      // -9223372036854775808 through:
      // +9223372036854775807
 
      #endregion
      if (MCD.YesNoDialog(
        "Test out Write longs?"))
          MemoryMapper.WriteInt64(args);
 
      if (!MCD.YesNoDialog(
        "Test out Read longs?")) return;
      var result = MemoryMapper
        .ReadInt64(args).ToList();
      result.Sort();
      var long1S = result.Aggregate(
        "", (current, l) => current +
          string.Format("{0}, ", l));
      long1S = long1S.Remove(long1S.Length-2);
      long1S = long1S.Normalize();
 
      MessageBox.Show(string.Format(
        "\nMin long Value: {0}" +
        "\nMax long Value: {1}" +
        "\n\nSorted List of Int64:\n{2}",
        long.MinValue, long.MaxValue, long1S));
    }
    
    // Space for Rent or Lease, nothing down!
 
 
#endregion TestCode Only
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
#region Scrap Pile
 
      //var file = Path
      //  .GetDirectoryName(PbPath)
      //  + "\\" + MCT.SharedFile;
      //var waz = new Collection<string>{"Test"};
      //var bc = BackColor;
      //var data = WriteShared
      //  .GetData(file, waz, bc);
      //var args = ShowMe.ShowMeForm
      //  .GetSharedArgs(file, data);
      //args[6] = true;
      //MMF.ReadStrings(args);
      ////Thread.Sleep(333);
      //MMF.WriteStrings(args);
 
  //private static bool TestSkip()
  //{
  //  var sk = MCT.Skip;
  //  MCT.Skip = false;
  //  if (MCD.YesNoDialog(
  //    "Test Get Skip?"))
  //    for (var x = 1; x < 250; ++x)
  //    {
  //      Thread.Sleep(125);
  //      MCT.Skip = !MCT.Skip;
  //    }
  //  else
  //  {
  //    MCT.Skip = sk;
  //    return false;
  //  }
  //  MCT.Skip = sk;
  //  return true;
  //}
 
    //MCT.Skip = false;
    //if (MCD.YesNoDialog("Test Set Skip?"))
    //  for (var i = 1; i < 250; ++i)
    //  {
    //    Thread.Sleep(250);
    //    MCT.Skip = !IsEven(i);
    //    #region Release Test Code
    //    //MessageBox.Show(
    //    //  string.Format(
    //    //    "MCT.Skip is Set to {0}",
    //    //    MCT.Skip));
    //    #endregion
    //  }
    //else
    //{
    //  MCT.Skip = sk;
    //  return false;
    //}
    //MCT.Skip = sk;
    //return true;
  //}
 
    //private static bool IsEven(int i)
    //{
    //  decimal even = i;
    //  // ReSharper disables PossibleLossOfFraction
    //  return even/2 == i/2;
    //  // ReSharper restore PossibleLossOfFraction
    //}
    //// that's my ^ point, it's uneven!
 
#endregion
    //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
 
 
  }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎