Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- // PrintForm3.cs 30-Apr v4.3.5.51n
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- // 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.
- // Perfected 11-May-2018
- // v4.4.5.52 Finally Fixes it RIGHT!
- // v4.9.3.87 14-Nov-2018 Removals.
- // v4.9.4.88 17-Nov Evolved touches.
- // v4.9.4.90 27-Nov-2018 ReadRemovals() and
- // GetSelectedIndex() integration completed.
- // NOTE: See calls to GetSelectedIndex();
- // v4.9.4.91 01-Dec-2018 Integration ^
- // v4.9.4.92 04-Dec-2018 Killed.sme Mods.
- // v4.9.5.93 08-Dec-2018 ME.WriteShared
- // for Killed file passback to Blaster
- // v4.9.5.94 10-Dec Polish and Read Thru.
- // v4.9.5.94 13-Dec-2018 ME2PB Killed 1 & 2
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- using System;
- using System.Collections.ObjectModel;
- using System.Collections.Specialized;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Windows.Forms;
- using System.Collections.Generic;
- // Class Aliases
- using MyCustomLibrary;
- using MyEditor;
- using MCD = MyCustomLibrary.Dialogs;
- using MCT = MyCustomLibrary.MyToolbox;
- // Property Aliases
- using PFR = PrintBlaster.Properties.Resources;
- using PFS = PrintBlaster.Properties.Settings;
- namespace PrintBlaster
- {
- public partial class PrintForm1
- {
- #region NOTE:
- // Several of the Context Menu items are simply sent to the existing Menu item handler. (And vise-versa.)
- #endregion
- #region Up/Down Method Group
- /// <summary> This Method calls all
- /// others in the below Method Group.
- /// They've been split-out to
- /// simplify this method's reading
- /// and compartmentalize the tasking.
- /// Perfected 11-May-2018 v4.4.5.52
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void MoveClick(
- object sender, EventArgs e)
- {
- var dir = GetDirectional(sender);
- if (dir.Equals(0)) return;// err handled.
- var ct = listBox1.SelectedItems.Count;
- var indices = new int[ct];
- var items = new string[ct];
- GetArrays(ref indices, ref items);
- var up = dir < 0;
- var last = listBox1.Items.Count - 1;
- // v if it's Up from the top...
- if (up && indices.Contains(0)
- // v ...or if it's Down from the bottom:
- || !up && indices.Contains(last))
- QuickMove(up);// Wrap around!
- else // <-= no indices contain 0 OR last!
- MoveSelected(indices, items, up);
- // then reSelect previously selected items.
- for (var i = 0; i < ct; ++i)
- listBox1.SetSelected(
- listBox1.Items.IndexOf(items[i]), true);
- }
- // Nice when wrapping is easier!
- private void QuickMove(bool up)
- {
- if (up)
- { // from the top...
- var item = listBox1.Items[0];
- listBox1.Items.RemoveAt(0);
- listBox1.Items.Add(item);
- // ^ ...to the bottom.
- }
- else
- { // Or from the bottom...
- var last = listBox1.Items.Count - 1;
- var item = listBox1.Items[last];
- listBox1.Items.RemoveAt(last);
- listBox1.Items.Insert(0, item);
- } // ...to the top! (Swap)
- }
- // ^ thus Nothing is top or bottom here!
- private void MoveSelected(
- IList<int> indices,
- IList<string> items, bool up)
- {
- if (up)
- { // Move em Up...
- var c = listBox1
- .SelectedItems.Count;
- for (var i = 0; i < c; ++i)
- { // Highest 1st For Up ^
- var item = items[i];
- var to = indices[i];
- listBox1.Items.Remove(item);
- listBox1.Items.Insert(--to, item);
- }
- } else { // v if Down...
- var last = listBox1.Items.Count - 1;
- for (var i = listBox1.SelectedItems
- .Count -1; i > -1; --i)// <-count down
- { // Lowest first For ^ Down!
- var item = items[i];
- var jp = indices[i];
- listBox1.Items.Remove(item);
- if (++jp < last) listBox1.Items
- .Insert(jp, item);
- else // it's last. (Add last)
- listBox1.Items.Add(item);
- }
- }
- Validate();
- }
- private static int
- GetDirectional(object sender)
- {
- var dir = 0; // dir == direction;
- var str = Convert.ToString(sender);
- if (str.Contains("Up")) dir = -1;
- else if (str.Contains("Down")) dir = 1;
- return dir;
- }
- private void GetArrays(// indirectional
- ref int[] indices, ref string[] items)
- {
- var ct = listBox1.SelectedItems.Count;
- try
- {
- for (var i = 0; i < ct; ++i)
- {
- indices[i] = Convert.ToInt32(
- listBox1.SelectedIndices[i]);
- items[i] = listBox1
- .SelectedItems[i].ToString();
- }
- }
- catch (Exception e)
- {
- if (!MCT.Testing) return;
- MessageBox.Show(e.ToString());
- throw new InvalidCastException(
- "Get Arrays");
- }
- }
- #endregion Up/Down Method Group
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- #region Favorites Mods from PB to ME
- private void RemoveFromListClick(
- object sender, EventArgs e)
- {
- if (!MCD.YesNoDialog(
- PFR.Remove)) return;
- var s = listBox1.SelectedItems;
- var z = new StringCollection();
- foreach (var w in from object o in s
- select Convert.ToString(o)
- into w where !string.IsNullOrEmpty(w)
- && File.Exists(w)
- && !z.Contains(w) select w) z.Add(w);
- // REM: Remove from Bottom up.
- for (var i = s.Count - 1; i > -1; --i)
- listBox1.Items.Remove(s[i]);
- var n = z.Cast<string>().ToList();
- var t = new Thread(
- ReSetFavoritesSetting);
- t.Start(n);
- }
- private void DeleteFromDiskClick(
- object sender, EventArgs e)
- {
- if (!MCD.YesNoDialog(
- PFR.Delete)) return;
- var was = MCT.Skip;
- MCT.Skip = false;
- if (!MCD.YesNoDialog(PFR.Sure))
- { MCT.Skip = was;
- return; }
- MCT.Skip = was;
- var s = listBox1.SelectedItems;
- var z = new StringCollection();
- foreach (var w in from object o in s
- select Convert.ToString(o) into w
- where !string.IsNullOrEmpty(w)
- && File.Exists(w) // v4.9.3.87
- && !z.Contains(w) // <======<<
- select w) z.Add(w); // Nice!
- for (var i = s.Count-1; i > -1; --i)
- { if (!MCT.Testing)
- File.Delete(s[i].ToString());
- listBox1.Items.Remove(s[i]); }
- var n = z.Cast<string>().ToList();
- var t = new Thread(
- ReSetFavoritesSetting);
- t.Start(n);
- }
- // Have this worker thread send
- // a mmf msg to ME telling it the file
- // Removals for ResetFavorites(), but
- // if ME not running, add to Removals.
- private void
- ReSetFavoritesSetting(object n)
- {
- var fn = Path.GetDirectoryName(
- EdPath) + PFR.Favs;
- var list = n as Collection<string>;
- // handle both remove AND delete.
- if ( list == null
- || list.Count < 1
- || !File.Exists(fn)
- || !MCT.RemoveFromFavoritesFile(
- list, fn) // v4.9.4.91
- || !MCD.YesNoDialog(
- PFR.ReSet, PFR.ReSetTtl, 1)
- ) return;
- // else let's getter done.0
- if (MyEditorIsRunning()) ReSet2(list);
- else AppendToRemovals(list);
- // Worker thread requires. v
- if (CountLabel2.InvokeRequired)
- Invoke(new Invoker1(GetFileCount));
- else GetFileCount();
- }
- private void ReSet2(
- Collection<string> list)
- {
- var file = Path.GetDirectoryName(
- EdPath)+ PFR.MMF1;
- var name = Path.
- GetFileNameWithoutExtension(file);
- var args = new object[]
- {
- file, PFS.Default.EditorSize,
- PFS.Default.EditorOffset2,
- list, true, name, false, // Uses...
- PFS.Default.EditorView2 //<-= ALL 8
- };
- MemoryMapper.WriteStrings(args);
- }
- private void GetFileCount()
- {
- CountLabel2.Text =
- Convert.ToString(
- listBox1.Items.Count);
- CountLabel2.Text =
- CountLabel2.Text.PadLeft(4);
- }
- // NOW: When MyEditor is NOT Running...
- // do it this way in case they accumulate.
- // (Named like a mmf, but it's a text file.)
- // v4.9.4.88RC 17-Nov-2018
- private void AppendToRemovals(
- IList<string> list)
- {
- if (list == null
- ||list.Count < 1) return;
- var path = Path.GetDirectoryName(
- EdPath) + PFR.Removals;
- if (File.Exists(path))
- {
- var coun = list.Count;
- var copy = new string[coun];
- for (var i = 0; i < coun; ++i)
- copy[i] = list[i];
- var removes = File.ReadAllLines(
- path, Encoding.Unicode);
- // When already in there forget it.
- foreach (var file in copy.Where(
- file => removes.Contains(file)
- && File.Exists(file)))
- list.Remove(file);
- }
- if (list.Count > 0)
- File.AppendAllLines(
- path, list, Encoding.Unicode);
- }
- #endregion Favorites Mods from PB to ME
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- #region Favorites Mods from ME to PB
- /// <summary> For Removals while RUNNING
- /// Checks for List of Strings
- /// Passed in via the mmf Killed1.sme
- /// from MyEditor.WriteShared.Kill1();
- /// Calls Reset with List of files
- /// to Remove from listBox1 & Settings.
- /// </summary>
- private void SetupKilledWatcher()
- {
- KilledWatcher.NotifyFilter =
- NotifyFilters.FileName;
- KilledWatcher.InternalBufferSize = 8192;
- KilledWatcher.EnableRaisingEvents = false;
- KilledWatcher.Path = WriteShared.AppRoot;
- KilledWatcher.Filter =
- Path.GetFileName(PFR.KillNow);
- KilledWatcher.Created +=
- KilledEventHandler;
- KilledWatcher.EnableRaisingEvents = true;
- }
- /// <summary> Go ahead and handle Kills:
- /// (above) Removing them from listBox1
- /// and the corresponding Setting.
- /// REM: Favorites.sme data file
- /// has already been taken care of.
- /// (Worker Thread) Thread Safe,
- /// File-Safe via MMF Class I wrote.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void KilledEventHandler(
- object sender, FileSystemEventArgs e)
- {
- var file = WriteShared
- .AppRoot + PFR.KillNow;
- if (string.IsNullOrEmpty(file)
- || !File.Exists(file)) throw new
- ArgumentException(PFR.Err6);
- var args =
- new object[]
- {
- file, 0, 0, null, true, Path.
- GetFileNameWithoutExtension(file),
- true // <-= Delete v file once read.
- };
- var data = MemoryMapper.ReadStrings(args);
- if ( data == null
- || data.Count < 1) return;
- if (listBox1.InvokeRequired)
- Invoke(new Invoker2(
- KillFileNames), data);
- else KillFileNames( data);
- // REM: Favorites.sme and MyEditor...
- // Setting, both handled by that side.
- }
- /// <summary> (worker) Handles Killed
- /// Files from Settings for file list
- /// sent from MyEditor, Using file
- /// system Watcher & Eventhandler
- /// for Killed1.sme and method group.
- /// NOT TO BE CONFUSED W/ Favorites.sme
- /// Which is already handled elsewhere.
- /// That goes from PB2ME and this one
- /// goes from ME2PB.
- /// v4.9.4.92 06-Dec-2018 by -JpE-
- /// </summary>
- /// <param name="parms"></param>
- private void KillFileNames(object parms)
- {
- using (new Mutex(false, PFR.Killer))
- {
- if (parms == null) throw new
- ArgumentException(PFR.Err4);
- var data = parms as Collection<string>;
- if (data == null
- || data.Count < 1) return;
- // REM: Direct to OverLoad below.
- RoadKill(data);
- }
- }
- /// <summary> Checks for Killed2.sme Files
- /// on Launch When Blaster was NOT Running:
- /// Similar to the above but not; as this 1
- /// While the above handles it when running.
- /// (Reads Killed2.sme File on Launch)
- /// </summary>
- private void RoadKill()
- { // Executes on Startup Only!
- var dir = WriteShared.AppRoot;
- using (File.Create(dir + PFR.PB)){}
- // Set PB is Now Running flag! ^
- var fn = dir + PFR.KillLater;// |
- if (!File.Exists(fn)) return;
- var files = File.ReadAllLines(
- fn, Encoding.Unicode);
- if (files.Length < 1) return;
- // Now, just "getter" Done.
- RoadKill(files);
- if (File.Exists(fn)) File.Delete(fn);
- }
- /// <summary> OverLoad for special Call
- /// from KillFileNames();
- /// For better ReUse of TestedCode.
- /// </summary>
- /// <param name="files"></param>
- private void RoadKill(
- IEnumerable<string> files)
- {
- using (new Mutex(false, PFR.RoadKill))
- {
- foreach (var file in files)
- {
- if (PFS.Default.Files.Contains(file))
- PFS.Default.Files.Remove(file);
- if (listBox1 == null
- || listBox1.Items.Count < 1) break;
- if (listBox1.Items.Cast<string>()
- .Contains(file))
- listBox1.Items.Remove(file);
- }
- PFS.Default.Save();
- }
- }
- #endregion Favorites Mods from ME to PB
- //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement