#region Top Part
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// EncryptDecryptContext.cs v6.9.9.92
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// Extended Class Visible To All 3 Apps.
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// v6.9.9.92 20210416213021 Context Menu
// Items Split Out and EnDecrypt Begun.
// v6.9.9.93 202104202306 MoreOver Context.
// v6.9.9.93b 0426020112 Isolated Detailing.
// v6.9.9.94 202104280033 Additional Items
// added to Context Menu and Developed out.
// v6.9.9.94b 20210503045146 Wrapup & polish
// v6.9.9.95 20210529005228 Reenvisioned!!!
// v6.9.9.96 202106020121 MultiMove Stickler
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using MCC = MyCustomControls.CustomControl;
using MCD = MyCustomLibrary.Dialogs;
using MCT = MyCustomLibrary.MyToolbox;
using SMF = ShowMe.ShowMeForm;
using SPR = ShowMe.Properties.Resources;
using SPS = ShowMe.Properties.Settings;
#endregion Pop Tart
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
namespace ShowMe
{
public partial class EncryptDecrypt
{
#region Active Form members
/* DOC: Relationship of Method Groups
* =====================================
* Form Buttons are clickEvents, but the
* CheckBoxes use CheckChanged Events;
* Giving those this-^-Event would then
* cause stack overflow errors and Hang.
*
* So, those toolstrip items cannot use
* that mechanism. They instead, are now
* 'Click' Events. They flip the switch
* and let it's CheckChanged Event do
* the rest. These merely change those
* values and no such event is required.
* =====================================
*/
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// Connected to Save for New Files To
// Encrypt Automagically if Auto = true.
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// PROPERTIES:
public static bool AutoEncrypt
{
get { return Auto; }
set { Auto = value; }
}
static bool Auto
{
get
{
return
SPS.Default.AutoCheckBoxChecked;
}
set
{
SPS.Default
.AutoCheckBoxChecked = value;
SPS.Default.Save();
}
}
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
// CheckBox.CheckChanged EVENTHANDLERS:
void AutoEncryptCheckedChanged(
object sender, EventArgs e)
{
// Gets saved at the property setter.
Auto =
autoEncryptItem.Checked =
autoEncryptCheckBox.Checked;
}
/* This just toggles it...
* back to what it wasn't. And the
* condition gets used to branch in
* the SetupListBox1Text() method.
*
* If fullPathCheckBox.Checked = checked
* it only shows the filename. If not
* checked it goes back to the FullPath.
* So don't forget that the fullpath is
* always in that Indice of FileList[g]
* global. Then just use the CheckBox or
* Setting to feel it. Etc.
*
*/
void FullPath(
object sender, EventArgs e)
{
GetSelectedNames();
var cb = sender as CheckBox;
if (cb == null) return;
SPS.Default
.FileNameChckBxChckd =
fileNameItem.Checked =
cb.Checked;
SPS.Default.Save();
SetupListView1();
}
void StayOnTopCheckedChanged(
object sender, EventArgs e)
{
TopMost =
SPS.Default.TopMost =
stayOnTopItem.Checked =
stayOnTopCheckBox.Checked;
SPS.Default.Save();
}
#endregion Active Form members
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
#region ToolStrip MenuItem Settings
/* DOC: Relationship of Method Groups
* =====================================
* Form Buttons are clickEvents, but the
* CheckBoxes ^ use CheckChanged Events;
* Giving these that ^ Event would then
* cause stack overflow errors and Hang.
*
* So, these toolstrip items cannot use
* that mechanism. They instead, are now
* 'Click' Events. These flip the switch
* and lets it's CheckChanged Event do
* the rest. Those ^ merely change these
* values and no such event is required.
* =====================================
*/
void SortPrefClicked(
object sender, EventArgs e)
{
GetSelectedNames();
var toolStripMenuItem =
sender as ToolStripMenuItem;
if (toolStripMenuItem ==
null) return;
sortFileListItem.Checked =
toolStripMenuItem.Checked;
SetupListView1();
}
void AutoEncryptItemClicked(
object sender, EventArgs e)
{
autoEncryptCheckBox.Checked =
autoEncryptItem.Checked;
}
void FullPathItemClicked(
object sender, EventArgs e)
{
fileNameCheckBox.Checked =
fileNameItem.Checked;
}
void StayOnTopItemClicked(
object sender, EventArgs e)
{
stayOnTopCheckBox.Checked =
stayOnTopItem.Checked;
}
#endregion ToolStripMenu Item Settings
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
#region Context Menu Items
void AddFilesButton(
object sender, EventArgs e)
{
OpenFileDialog o;
listView1.SelectedIndices.Clear();
using (var c = new MCC())
{ o = c.O1; } // My Custom OFD
o.FileName = "";
o.Filter = SPR.OdFilter;
o.FilterIndex = 2;
o.InitialDirectory =
Environment.GetFolderPath(
Environment.SpecialFolder
.MyDocuments);
o.Title = SPR.MyAdHd;
var rslt = o.ShowDialog(); // <=====<<
var files = o.FileNames;
o.Dispose();
if (rslt != DialogResult.OK) return;
AddFiles(files);
// v6.9.9.95 mods 20210603
foreach(var file in files.Where(file=>
!SPS.Default.Selected.Contains(file)
))
SPS.Default.Selected.Add(file);
SPS.Default.Save();
SetupListView1();
}
void AddFiles(IEnumerable files)
{
if (listView1.InvokeRequired)
Invoke(new Invoker12(
AddFiles2), (object) files);
else
AddFiles2(files);
}
/// <summary> Doc
/// For Thread and Process Safety
/// while in Debug mode. It doesn't
/// trigger when the Debugger is
/// NOT Attached to the Process.
/// </summary>
/// <param name="o"></param>
delegate void Invoker12(object o);
void AddFiles2(object strArr)
{
var arr = strArr as string[];
if (arr == null ||
arr.Length < 1) return;
foreach (var str in arr
.Where(str => !string
.IsNullOrEmpty(str) &&
File.Exists(str) &&
// new line to check for dups.
!FileList.Contains(str))
)
FileList.Add(str);
}
void RemoveFileNames(
object sender, EventArgs e)
{
if (listView1 == null || listView1
.SelectedItems.Count < 1
|| !MCD.YesNoDialog(SPR.RmvTxt)
)
return;
// Remove bottomUp avoid offsetting ea
var t = listView1.SelectedIndices;
var c = listView1.SelectedIndices.Count;
for (var f = c-1; f >= 0; --f)
{
var z = t[f];
listView1.Items.RemoveAt(z);
FileList.RemoveAt(z);
}
SetupListView1();
}
void ViewTheseItems(
object sender, EventArgs e)
{
if (listView1.SelectedItems.Count < 1
|| !MCD.YesNoDialog(SPR.VewTxt)
) return;
var ins = listView1.SelectedIndices;
var c = ins.Count;
var strs = new string[c];
for (var n = c-1; n >= 0; --n)
strs[n] = FileList[ins[n]];
foreach (var str in strs)
{
Thread.Sleep(200);
MCT.RunApp(str,
SPR.PrevFile + str,
MCT.GetRoot + SPR.Sme);
}
}
void SkipAySItemClicked(
object sender, EventArgs e)
{
MCT.Skip = skipAyS.Checked;
}
#endregion Context Menu Items
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
#region Move Item(s)
// newer v6.9.9.95 20210603
// See also ReSelectItems() and also
// GetNewIndices(); as well, sorta.
// which, this scheme, all tie into
// our SetupListView1(); method.
void GetSelectedNames()
{
var n = listView1.SelectedItems.Count;
if (n < 1) return;
var k = new int[n];
listView1.SelectedIndices.CopyTo(k,0);
SPS.Default.Selected =
new StringCollection();
for (var i = 0; i < n; ++i)
SPS.Default.Selected.Add(
FileList[k[i]]);
SPS.Default.Save();
}
// works great EVEN with roll over
// or roll under and multiSelected!
// v6.9.9.96 20210606024314 ModZ!!
List<int> GetNewIndicas(int m)
{
var l = new List<int>();
var x = FileList.Count -1;
var c = listView1.SelectedItems.Count;
for (var n = 0; n < c; ++n)
{
var i =listView1.SelectedIndices[n];
if (i.Equals(null)) continue;
var k = i + m;
if (k < 0) k = x;// make 1st last
if (k > x) k = 0;// make last 1st
l.Add(k);
}
return l;
}
// if Up then subtract 1 from the
// indice, if it's Down then add 1
// to the indice to move it.
void MoveItemsClicked(
object sender, EventArgs e)
{
var b = sender as ToolStripMenuItem;
if (b == null || (sortFileListItem
.Checked && !Flip())) return;
GetSelectedNames();
var m = b.Text.Contains("Up")? -1:1;
var l = GetNewIndicas(m);
MoveItems(m, l);
SetupListView1();
}
void MoveItems(int m, IList<int> l)
{
var t = new string[
FileList.Count];
FileList.CopyTo(t,0);
var c = l.Count -1;
if (m < 0)
for (var i = 0; i <= c; ++i)
ItemMoveLoop(l,i,t); // UP
else
for (var i = c; i >= 0; --i)
ItemMoveLoop(l,i,t); // Down
}
void ItemMoveLoop(IList<int> l,
int i, IList<string> filelist2)
{
var t = l[i];
var f = FileList.Count;
if (f < 2||t < 0||t >= f) return;
var n = filelist2[ listView1
.SelectedIndices[i] ];
FileList.Remove(n);
FileList.Insert(t, n);
}
bool Flip()
{
var rslt =
MessageBox.Show(
SPR.FlipTxt, SPR.FlipTtl,
MessageBoxButtons.OKCancel,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1)
== DialogResult.OK;
if (!rslt) return false;
sortFileListItem.Checked =
SPS.Default.Sort = false;
SPS.Default.Save();
return true;
}
#endregion Move Item(s)
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
}
}
// 100% -JpE-
Comments
0 B
|👍
/👎