#region Top Part //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ // MyDialogs.cs AppStatic Assembly // Tools and Dialogs among others. //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ // Brought over from Smesav Project // AppStatic.Tools & .Dialogs are // Independent like MyCustomControl // v2.3.7.27 15-Dec-2018 -JpE- // v4.5.7.57 09-Jun-18 // v4.5.7.58 03-Jul-18 ReOrganized. // v4.7.0.71 19-Sep About Colors. // v5.0.6.01 06-Mar-2019 Overloads // v5.2.7.12 02-May-2019 Search Pro // v5.2.7.14 12-May-2019 Perfectionist // v5.2.8.16 18-May Ready for After Dialog. // v5.2.8.17 24-May PropertyChangedEvents. // v5.2.8.18 26-May-2019 Search Pro Design. // v5.3.0.22 22-Jun Search Pro Development. // v5.3.1.23 01-Jul light Search touches. // v5.3.1.24 03-Jul Integrating Search mods. // v5.3.1.25 10-Jul Final Here in MCD! // v5.3.3.28 21-July SmesaSearch.cs rockin' // v5.4.5.32 07-Aug-2019 Search & Replace. // v5.4.6.36 04-Sep Search string, BuggFixxd // & further refined Search Launch. ++ 9-07 // v5.4.6.37 10-Sep-2019 Shakedown 4 Search. //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ using System; using System.Collections.ObjectModel; using System.IO; using System.Drawing; using System.Threading; using System.Windows.Forms; using System.Collections.Generic; // My Custom Controls Class using MyCustomControls; // & My Custom Library alias using MCT = MyCustomLibrary.MyToolbox; // & Custom Property Aliases using MCS = MyCustomLibrary .Properties.Settings; using MCR = MyCustomLibrary .Properties.Resources; #endregion Pop Tart namespace MyCustomLibrary { /** MyCustomControls Legend: ** ******************************* * O1 = MyOpenDialog; * R1 = MyRichTextBox; * P1 = MyPrintDialog; * P2 = MyPreviewControl; * P3 = MyPreviewDialog; * D1 = MyPrintDoc; * P4 = MyPageSetup; * M1 = MyPreviewMenuStrip; * M2 = MyColorDialog; * F0 = MyFontDialog; * S1 = MySaveDialog; ******************************* */ public static class Dialogs { #region Everything Else /// ReUses About Form /// for each Smesa App. Args for /// each are passed in; making this /// Public Method very ReUsable. -JpE- /// v4.5.7.58 03-July-2018 /// /// /// public static void AboutApp( IList colors, IList args) { if (args == null) return; var l = args.Count; using (var a = new AboutBox(colors)) { if (l>0) a.Title141(args[0]); if (l>1) a.Product1(args[2]); if (l>3) a.Rights12(args[3]); if (l>4) a.Company4(args[4]); if (l>5) a.Describe(args[5]); // args for each passed in. a.Size = MCS.Default.AboutSize; a.Location = MCS.Default.AboutLocation; a.ShowDialog(); MCS.Default.AboutSize = a.Size; MCS.Default.AboutLocation = a.Location; } MCS.Default.Save(); } //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //public static bool // cleanup unused when finished. // YesNoDialog() //{ return YesNoDialog(MCR.YND_Txt); } //// Defaults to Text, Title, & NO public static bool YesNoDialog(string text) { return YesNoDialog( text, MCR.YND_Ttl); } public static bool YesNoDialog( string text, string title) { const int no = 2; return YesNoDialog( text, title, no); } /// Public Access Multi-Purpose /// ReUsable OverLoaded Method-Group /// Designed For Extreme ReUse Potential. /// Defaults to SMR.AYS_Txt, /// title is SMR.AYS_Ttl /// The NO (2) button as DEFAULT. NO /// v1.0.3.26a 04-Dec-2017 /// v2.2.5.26y 27-Dec-2017 /// /// /// /// /// public static bool YesNoDialog(string text, string title, int def) { if (MyToolbox.Skip) return true; if (def < 1 || def > 2) def = 2; if (string.IsNullOrEmpty(text)) text = MCR.YND_Txt; if (string.IsNullOrEmpty(title)) title = MCR.YND_Ttl; var db = MessageBoxDefaultButton.Button2; const MessageBoxDefaultButton yes = MessageBoxDefaultButton.Button1; if (def < 2) db = yes; return DialogResult.Yes.Equals( MessageBox.Show(text, title, MessageBoxButtons.YesNo, MessageBoxIcon.Question, db)); } //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ //public static DialogResult YesNoCancel() //{ return YesNoCancel(MCR.YND_Txt); } ///* Default to Text, Title, & NO */ //public static DialogResult // YesNoCancel(string text) //{ return YesNoCancel(text, MCR.YND_Ttl); } //// Default to Title & NO public static DialogResult YesNoCancel(string text, string title) { const int cancel = 3; return YesNoCancel(text, title, cancel); } // Default to Cancel ^ /// Defaults to ASR.AYS_Txt, /// ASR.AYS_Ttl and Cancel. /// Returns the Actual Dialog Result. /// /// /// /// /// static DialogResult YesNoCancel( string text, string title, int def) { if (MyToolbox.Skip) return DialogResult.Yes; if (def < 1 || def > 3) def = 3; if (string.IsNullOrEmpty(text)) text = MCR.YND_Txt; if (string.IsNullOrEmpty(title)) title = MCR.YND_Ttl; var d = MessageBoxDefaultButton.Button3; if (def == 2) d = MessageBoxDefaultButton.Button2; if (def == 1) d = MessageBoxDefaultButton.Button1; return MessageBox.Show(text, title, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information, d); } //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ public static int GetSavePreference() { const string t = ""; return GetSavePreference(t); } static int GetSavePreference(string text) { const string t = ""; return GetSavePreference(text, t); } public static int GetSavePreference( string text, string title) { const bool no = false; return GetSavePreference( text, title, no); } static int GetSavePreference( string text, string title, bool hide) { const bool no = false; return GetSavePreference( text, title, hide, no); } /// Ask User to Save @ 500 chars. /// Their response becomes their default /// if CheckBox.Checked, is 1 time otherwise /// NOTE: tab = Tab our User has Open, the /// Active RTB in the FileName Collection. /// v1.0.2.25j Modified for Multi-Use. /// /// /// /// /// public static int GetSavePreference( string text, string title, bool hide, bool check) { int status; if (hide) check = false; using (var y = new YesNoAlwaysForm2(text, title)) { y.Check = check; y.HideAlways = hide; y.Local = MCS.Default.YnaLoca; y.ShowDialog(); MCS.Default.YnaLoca = y.Local; status = y.Status; // Get Result. } MCS.Default.Save(); return status; } //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ public static int NewTabPrompt() { int pref;// Awesome and Simple! using (var t = new NewTabForm()) { t.ShowDialog(); pref = t.Preference; } return pref; } //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ /// Gets existing FileName(s) w/ /// Users Input ReDesigned & Moved to MCD /// v3.1.3.43 23-Mar-2018 /// /// /// /// /// /// /// public static string[] FileNameGetter( string[] fileNames, bool multiple, string ext, string filter, string dir) { if (fileNames == null || fileNames.Length < 1) return fileNames; OpenFileDialog ofd; using (var od = new CustomControl()) { ofd = od.O1; } using (var o = ofd) { o.Multiselect = multiple; o.FileName = fileNames[0]; o.DefaultExt = ext; o.Filter = filter; o.FilterIndex = 4; o.InitialDirectory = dir; if (!o.ShowDialog().Equals( DialogResult.OK)) return fileNames; if ( o.Multiselect && o.FileNames.Length > 0 && !string .IsNullOrEmpty(o.FileNames[0]) && File.Exists(o.FileNames[0])) fileNames = o.FileNames; else { if (!o.Multiselect && !string .IsNullOrEmpty(o.FileName) && File.Exists(o.FileName)) fileNames[0] = o.FileName; } } return fileNames; } #endregion Everything Else //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ #region Static Search Members static string GetSearchDefault { get { return Criteria; } } static string Criteria { get { return MCS.Default .SearchBoxCollection[0]; } } internal static Collection WholeList { get; private set; } internal static Collection Selected { get; set; } // Currently Editing FileName. internal static string Current { get; private set; } internal static Collection OpenFiles { get; private set; } public static object[] GetArgs( string file, byte task) { if (string.IsNullOrEmpty(file)) throw new ArgumentException(MCR.Err9); var mn1 = Path .GetFileNameWithoutExtension(file); var arr = new Collection{task}; // if not coll ^ bytes reset at usage. var obj = new object[] { file, 0, 0, arr, true, mn1, true }; return obj; } #region args_Doc // mmf = Memory Mapped File(s) Arguments // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // args[0] = Full Path to mmf. // args[1] = Size of file in bytes, // args[2] = Start @ Byte (offset) // args[3] = What to write? (OR Shred? T/F) // args[4] = true; Read? // args[5] = this mapping's name. // args[6] = true; Delete after Read? // args[7] = View Length from Offset. // (if Given) Not Required, either way.8 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #endregion /// Entry Point 4 Search Class /// NOTE: few.Count == 0 is Okay. /// /// /// /// public static void Search( string find, Collection all, Collection few) { if ( few == null || all == null || all.Count < 1 || SearchIsOpen()) return; if (few.Count.Equals(1) && Application.ExecutablePath .Contains(MCR.MyApp)) ItsMeCalling(all, few); // <-===<< else { OpenFiles = new Collection(); WholeList = all; Selected = few; } if (string.IsNullOrEmpty(find) || find.Equals(MCR.Search1)) find = GetSearchDefault; var thd = new Thread(Search2) { Name = "Search2" }; thd.Start(find); } // REM: New Worker-Thread from here-on! static void Search2(object obj) { SearchOpenToggle(); using (var sf = new SearchForm()) { sf.Search4(obj as String); sf.ShowDialog(); } Current = null; Selected = WholeList = null; SearchOpenToggle(); } static void SearchOpenToggle() { var f = SearchOpenName(); if ( File.Exists(f)) File.Delete(f); else File.WriteAllText(f, MCR.SearchOpenTxt + // Arbitrary atm Application.ExecutablePath); } static bool SearchIsOpen() { if (!File.Exists( SearchOpenName())) return false; if (!MCT.Skip) MessageBox .Show(MCR.SearchOpenTxt); return true; } static string SearchOpenName() { return Application.StartupPath + MCR.Search_Running; } // REM: it's ME calling so // Editor file is Current. // Makes Open = Selection. // Goes and gets Favorites.sme // data and sets as WholeList. static void ItsMeCalling( Collection all, IList few) { var file = MCT.GetRoot + MCR.Favs; var fav = MCT.GetList(file); if ( string.IsNullOrEmpty(file) || !File.Exists(file) || all.Equals(null) || all.Count < 1 || few.Equals(null) || few.Count < 1 || fav.Equals(null) || fav.Count < 1) return; // Swap around & ready for SearchForm. Current = few[0];// Editing file. OpenFiles = Selected = all; WholeList = fav; // <===<< from disk. } public static bool IsFile(string text) { if (string.IsNullOrEmpty(text) || text.Length < 1) throw new ArgumentException( "Bad arg in IsFile"); return text.Contains("\\") && text.Contains(":") && File.Exists(text); } #endregion Search Members //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ } }