Get rid of meta directories. Centralize directory logic. New UI component to revamp settings and installation
This commit is contained in:
parent
5d6e3ea3f3
commit
2243e2a124
@ -28,36 +28,9 @@ namespace FileManager
|
|||||||
public static AudibleFileStorage AAXC { get; } = new AaxcFileStorage();
|
public static AudibleFileStorage AAXC { get; } = new AaxcFileStorage();
|
||||||
public static AudibleFileStorage PDF { get; } = new PdfFileStorage();
|
public static AudibleFileStorage PDF { get; } = new PdfFileStorage();
|
||||||
|
|
||||||
public static string DownloadsInProgress
|
public static string DownloadsInProgress => Directory.CreateDirectory(Path.Combine(Configuration.Instance.DownloadsInProgressEnum, "DownloadsInProgress")).FullName;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (!Configuration.Instance.DownloadsInProgressEnum.In("WinTemp", "LibationFiles"))
|
|
||||||
Configuration.Instance.DownloadsInProgressEnum = "WinTemp";
|
|
||||||
var AaxRootDir
|
|
||||||
= Configuration.Instance.DownloadsInProgressEnum == "WinTemp"
|
|
||||||
? Configuration.WinTemp
|
|
||||||
: Configuration.Instance.LibationFiles;
|
|
||||||
|
|
||||||
return Directory.CreateDirectory(Path.Combine(AaxRootDir, "DownloadsInProgress")).FullName;
|
public static string DecryptInProgress => Directory.CreateDirectory(Path.Combine(Configuration.Instance.DecryptInProgressEnum, "DecryptInProgress")).FullName;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string DecryptInProgress
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (!Configuration.Instance.DecryptInProgressEnum.In("WinTemp", "LibationFiles"))
|
|
||||||
Configuration.Instance.DecryptInProgressEnum = "WinTemp";
|
|
||||||
|
|
||||||
var M4bRootDir
|
|
||||||
= Configuration.Instance.DecryptInProgressEnum == "WinTemp"
|
|
||||||
? Configuration.WinTemp
|
|
||||||
: Configuration.Instance.LibationFiles;
|
|
||||||
|
|
||||||
return Directory.CreateDirectory(Path.Combine(M4bRootDir, "DecryptInProgress")).FullName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// not customizable. don't move to config
|
// not customizable. don't move to config
|
||||||
public static string DownloadsFinal => new DirectoryInfo(Configuration.Instance.LibationFiles).CreateSubdirectory("DownloadsFinal").FullName;
|
public static string DownloadsFinal => new DirectoryInfo(Configuration.Instance.LibationFiles).CreateSubdirectory("DownloadsFinal").FullName;
|
||||||
|
|||||||
@ -50,18 +50,62 @@ namespace FileManager
|
|||||||
set => persistentDictionary.Set(nameof(Books), value);
|
set => persistentDictionary.Set(nameof(Books), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
private const string APP_DIR = "AppDir";
|
#region known directories
|
||||||
public static string AppDir { get; } = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Exe.FileLocationOnDisk), LIBATION_FILES));
|
public const string WIN_TEMP_LABEL = "WinTemp";
|
||||||
public static string MyDocs { get; } = Path.GetFullPath(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), LIBATION_FILES));
|
public const string LIBATION_FILES_LABEL = "LibationFiles";
|
||||||
public static string WinTemp { get; } = Path.GetFullPath(Path.Combine(Path.GetTempPath(), "Libation"));
|
public const string USER_PROFILE_LABEL = "UserProfile";
|
||||||
|
|
||||||
|
public static string AppDir_Relative => @".\LibationFiles";
|
||||||
|
public static string AppDir_Absolute => Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Exe.FileLocationOnDisk), LIBATION_FILES));
|
||||||
|
public static string MyDocs => Path.GetFullPath(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "LibationFiles"));
|
||||||
|
public static string WinTemp => Path.GetFullPath(Path.Combine(Path.GetTempPath(), "Libation"));
|
||||||
|
public static string UserProfile => Path.GetFullPath(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Libation"));
|
||||||
|
|
||||||
private Dictionary<string, string> wellKnownPaths { get; } = new Dictionary<string, string>
|
public enum KnownDirectories
|
||||||
{
|
{
|
||||||
[APP_DIR] = AppDir,
|
None = 0,
|
||||||
["MyDocs"] = MyDocs,
|
|
||||||
["WinTemp"] = WinTemp
|
[Description("In my Users folder")]
|
||||||
|
UserProfile = 1,
|
||||||
|
|
||||||
|
[Description("In the same folder that Libation is running from")]
|
||||||
|
AppDir = 2,
|
||||||
|
|
||||||
|
[Description("In your Windows temporary folder")]
|
||||||
|
WinTemp = 3,
|
||||||
|
|
||||||
|
[Description("In My Documents")]
|
||||||
|
MyDocs = 4,
|
||||||
|
|
||||||
|
[Description("In your settings folder (aka: Libation Files)")]
|
||||||
|
LibationFiles = 5
|
||||||
|
}
|
||||||
|
// use func calls so we always get the latest value of LibationFiles
|
||||||
|
private static List<(KnownDirectories directory, Func<string> getPathFunc)> directoryOptionsPaths { get; } = new()
|
||||||
|
{
|
||||||
|
(KnownDirectories.None, () => null),
|
||||||
|
(KnownDirectories.UserProfile, () => UserProfile),
|
||||||
|
(KnownDirectories.AppDir, () => AppDir_Relative),
|
||||||
|
(KnownDirectories.WinTemp, () => WinTemp),
|
||||||
|
(KnownDirectories.MyDocs, () => MyDocs),
|
||||||
|
// this is important to not let very early calls try to accidentally load LibationFiles too early
|
||||||
|
(KnownDirectories.LibationFiles, () => libationFilesPathCache)
|
||||||
};
|
};
|
||||||
private string libationFilesPathCache;
|
public static string GetKnownDirectoryPath(KnownDirectories directory)
|
||||||
|
{
|
||||||
|
var dirFunc = directoryOptionsPaths.SingleOrDefault(dirFunc => dirFunc.directory == directory);
|
||||||
|
return dirFunc == default ? null : dirFunc.getPathFunc();
|
||||||
|
}
|
||||||
|
public static KnownDirectories GetKnownDirectory(string directory)
|
||||||
|
{
|
||||||
|
// especially important so a very early call doesn't match null => LibationFiles
|
||||||
|
if (string.IsNullOrWhiteSpace(directory))
|
||||||
|
return KnownDirectories.None;
|
||||||
|
|
||||||
|
var dirFunc = directoryOptionsPaths.SingleOrDefault(dirFunc => dirFunc.getPathFunc() == directory);
|
||||||
|
return dirFunc == default ? KnownDirectories.None : dirFunc.directory;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
// default setting and directory creation occur in class responsible for files.
|
// default setting and directory creation occur in class responsible for files.
|
||||||
// config class is only responsible for path. not responsible for setting defaults, dir validation, or dir creation
|
// config class is only responsible for path. not responsible for setting defaults, dir validation, or dir creation
|
||||||
@ -96,26 +140,29 @@ namespace FileManager
|
|||||||
private Configuration() { }
|
private Configuration() { }
|
||||||
|
|
||||||
private const string APPSETTINGS_JSON = "appsettings.json";
|
private const string APPSETTINGS_JSON = "appsettings.json";
|
||||||
|
// this is the key in appsettings. Happens to match the metadirectory name but separate concern. keep separate
|
||||||
private const string LIBATION_FILES = "LibationFiles";
|
private const string LIBATION_FILES = "LibationFiles";
|
||||||
|
|
||||||
[Description("Location for storage of program-created files")]
|
[Description("Location for storage of program-created files")]
|
||||||
public string LibationFiles => libationFilesPathCache ?? getLibationFiles();
|
public string LibationFiles
|
||||||
private string getLibationFiles()
|
|
||||||
{
|
{
|
||||||
var value = getLiberationFilesSettingFromJson();
|
get
|
||||||
|
{
|
||||||
|
if (libationFilesPathCache is not null)
|
||||||
|
return libationFilesPathCache;
|
||||||
|
|
||||||
// this looks weird but is correct for translating wellKnownPaths
|
// must write here before SettingsFilePath in next step reads cache
|
||||||
if (wellKnownPaths.ContainsKey(value))
|
libationFilesPathCache = getLiberationFilesSettingFromJson();
|
||||||
value = wellKnownPaths[value];
|
|
||||||
|
|
||||||
// must write here before SettingsFilePath in next step reads cache
|
// load json values into memory. create settings if not exists
|
||||||
libationFilesPathCache = value;
|
persistentDictionary = new PersistentDictionary(SettingsFilePath);
|
||||||
|
|
||||||
// load json values into memory. create if not exists
|
return libationFilesPathCache;
|
||||||
persistentDictionary = new PersistentDictionary(SettingsFilePath);
|
}
|
||||||
|
|
||||||
return libationFilesPathCache;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string libationFilesPathCache;
|
||||||
|
|
||||||
private string getLiberationFilesSettingFromJson()
|
private string getLiberationFilesSettingFromJson()
|
||||||
{
|
{
|
||||||
string startingContents = null;
|
string startingContents = null;
|
||||||
@ -124,26 +171,33 @@ namespace FileManager
|
|||||||
if (File.Exists(APPSETTINGS_JSON))
|
if (File.Exists(APPSETTINGS_JSON))
|
||||||
{
|
{
|
||||||
startingContents = File.ReadAllText(APPSETTINGS_JSON);
|
startingContents = File.ReadAllText(APPSETTINGS_JSON);
|
||||||
var jObj = JObject.Parse(startingContents);
|
var startingJObj = JObject.Parse(startingContents);
|
||||||
|
|
||||||
if (jObj.ContainsKey(LIBATION_FILES))
|
if (startingJObj.ContainsKey(LIBATION_FILES))
|
||||||
{
|
{
|
||||||
var value = jObj[LIBATION_FILES].Value<string>();
|
var startingValue = startingJObj[LIBATION_FILES].Value<string>();
|
||||||
|
|
||||||
// do not check whether directory exists. special/meta directory (eg: AppDir) is valid
|
// do not check whether directory exists. special/meta directory (eg: AppDir) is valid
|
||||||
if (!string.IsNullOrWhiteSpace(value))
|
if (!string.IsNullOrWhiteSpace(startingValue))
|
||||||
return value;
|
return startingValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
|
|
||||||
var endingContents = new JObject { { LIBATION_FILES, APP_DIR } }.ToString(Formatting.Indented);
|
// not found. write to file. read from file
|
||||||
|
var endingContents = new JObject { { LIBATION_FILES, UserProfile } }.ToString(Formatting.Indented);
|
||||||
if (startingContents != endingContents)
|
if (startingContents != endingContents)
|
||||||
|
{
|
||||||
File.WriteAllText(APPSETTINGS_JSON, endingContents);
|
File.WriteAllText(APPSETTINGS_JSON, endingContents);
|
||||||
|
System.Threading.Thread.Sleep(100);
|
||||||
|
}
|
||||||
|
|
||||||
return APP_DIR;
|
// do not check whether directory exists. special/meta directory (eg: AppDir) is valid
|
||||||
|
// verify from live file. no try/catch. want failures to be visible
|
||||||
|
var jObjFinal = JObject.Parse(File.ReadAllText(APPSETTINGS_JSON));
|
||||||
|
var valueFinal = jObjFinal[LIBATION_FILES].Value<string>();
|
||||||
|
return valueFinal;
|
||||||
}
|
}
|
||||||
|
|
||||||
public object GetObject(string propertyName) => persistentDictionary.GetObject(propertyName);
|
public object GetObject(string propertyName) => persistentDictionary.GetObject(propertyName);
|
||||||
@ -163,17 +217,16 @@ namespace FileManager
|
|||||||
|
|
||||||
public bool TrySetLibationFiles(string directory)
|
public bool TrySetLibationFiles(string directory)
|
||||||
{
|
{
|
||||||
if (!Directory.Exists(directory) && !wellKnownPaths.ContainsKey(directory))
|
// this is WRONG. need to MOVE settings; not DELETE them
|
||||||
return false;
|
|
||||||
|
|
||||||
// if moving from default, delete old settings file and dir (if empty)
|
//// if moving from default, delete old settings file and dir (if empty)
|
||||||
if (LibationFiles.EqualsInsensitive(AppDir))
|
//if (LibationFiles.EqualsInsensitive(AppDir))
|
||||||
{
|
//{
|
||||||
File.Delete(SettingsFilePath);
|
// File.Delete(SettingsFilePath);
|
||||||
System.Threading.Thread.Sleep(100);
|
// System.Threading.Thread.Sleep(100);
|
||||||
if (!Directory.EnumerateDirectories(AppDir).Any() && !Directory.EnumerateFiles(AppDir).Any())
|
// if (!Directory.EnumerateDirectories(AppDir).Any() && !Directory.EnumerateFiles(AppDir).Any())
|
||||||
Directory.Delete(AppDir);
|
// Directory.Delete(AppDir);
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
libationFilesPathCache = null;
|
libationFilesPathCache = null;
|
||||||
|
|||||||
@ -32,6 +32,7 @@ namespace LibationLauncher
|
|||||||
|
|
||||||
migrate_to_v4_0_0();
|
migrate_to_v4_0_0();
|
||||||
migrate_to_v5_0_0();
|
migrate_to_v5_0_0();
|
||||||
|
migrate_to_v5_2_0();
|
||||||
|
|
||||||
ensureSerilogConfig();
|
ensureSerilogConfig();
|
||||||
configureLogging();
|
configureLogging();
|
||||||
@ -57,9 +58,9 @@ namespace LibationLauncher
|
|||||||
var setupDialog = new SetupDialog();
|
var setupDialog = new SetupDialog();
|
||||||
setupDialog.NoQuestionsBtn_Click += (_, __) =>
|
setupDialog.NoQuestionsBtn_Click += (_, __) =>
|
||||||
{
|
{
|
||||||
config.DownloadsInProgressEnum ??= "WinTemp";
|
config.DownloadsInProgressEnum ??= Configuration.WIN_TEMP_LABEL;
|
||||||
config.DecryptInProgressEnum ??= "WinTemp";
|
config.DecryptInProgressEnum ??= Configuration.WIN_TEMP_LABEL;
|
||||||
config.Books ??= Configuration.AppDir;
|
config.Books ??= Configuration.AppDir_Relative;
|
||||||
config.AllowLibationFixup = true;
|
config.AllowLibationFixup = true;
|
||||||
};
|
};
|
||||||
// setupDialog.BasicBtn_Click += (_, __) => // no action needed
|
// setupDialog.BasicBtn_Click += (_, __) => // no action needed
|
||||||
@ -256,9 +257,53 @@ namespace LibationLauncher
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private static void ensureSerilogConfig()
|
#region migrate to v5.2.0 : get rid of meta-directories
|
||||||
|
private static void migrate_to_v5_2_0()
|
||||||
|
{
|
||||||
|
var config = Configuration.Instance;
|
||||||
|
|
||||||
|
{
|
||||||
|
var newPath = TranslatePath(config.DecryptInProgressEnum);
|
||||||
|
if (newPath != config.DecryptInProgressEnum)
|
||||||
|
config.DecryptInProgressEnum = newPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var newPath = TranslatePath(config.DownloadsInProgressEnum);
|
||||||
|
if (newPath != config.DownloadsInProgressEnum)
|
||||||
|
config.DownloadsInProgressEnum = newPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var appsettings = "appsettings.json";
|
||||||
|
var libationFiles = "LibationFiles";
|
||||||
|
|
||||||
|
var jObj = JObject.Parse(File.ReadAllText(appsettings));
|
||||||
|
var origVlaue = jObj[libationFiles].Value<string>();
|
||||||
|
var newValue = TranslatePath(origVlaue);
|
||||||
|
|
||||||
|
if (newValue != origVlaue)
|
||||||
|
{
|
||||||
|
var contents = new JObject { { libationFiles, newValue } }.ToString(Formatting.Indented);
|
||||||
|
File.WriteAllText(appsettings, contents);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string TranslatePath(string path)
|
||||||
|
=> path switch
|
||||||
|
{
|
||||||
|
"AppDir" => Configuration.AppDir_Relative,
|
||||||
|
"MyDocs" => Configuration.MyDocs,
|
||||||
|
Configuration.USER_PROFILE_LABEL => Configuration.UserProfile,
|
||||||
|
Configuration.WIN_TEMP_LABEL => Configuration.WinTemp,
|
||||||
|
_ => path
|
||||||
|
};
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private static void ensureSerilogConfig()
|
||||||
{
|
{
|
||||||
var config = Configuration.Instance;
|
var config = Configuration.Instance;
|
||||||
|
|
||||||
|
|||||||
113
LibationWinForms/Dialogs/DirectoryOrCustomSelectControl.Designer.cs
generated
Normal file
113
LibationWinForms/Dialogs/DirectoryOrCustomSelectControl.Designer.cs
generated
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
|
||||||
|
namespace LibationWinForms.Dialogs
|
||||||
|
{
|
||||||
|
partial class DirectoryOrCustomSelectControl
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Component Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.knownDirectoryRb = new System.Windows.Forms.RadioButton();
|
||||||
|
this.customDirectoryRb = new System.Windows.Forms.RadioButton();
|
||||||
|
this.customTb = new System.Windows.Forms.TextBox();
|
||||||
|
this.customBtn = new System.Windows.Forms.Button();
|
||||||
|
this.directorySelectControl = new LibationWinForms.Dialogs.DirectorySelectControl();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// knownDirectoryRb
|
||||||
|
//
|
||||||
|
this.knownDirectoryRb.AutoSize = true;
|
||||||
|
this.knownDirectoryRb.Location = new System.Drawing.Point(3, 3);
|
||||||
|
this.knownDirectoryRb.Name = "knownDirectoryRb";
|
||||||
|
this.knownDirectoryRb.Size = new System.Drawing.Size(14, 13);
|
||||||
|
this.knownDirectoryRb.TabIndex = 0;
|
||||||
|
this.knownDirectoryRb.UseVisualStyleBackColor = true;
|
||||||
|
this.knownDirectoryRb.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
|
||||||
|
//
|
||||||
|
// customDirectoryRb
|
||||||
|
//
|
||||||
|
this.customDirectoryRb.AutoSize = true;
|
||||||
|
this.customDirectoryRb.Location = new System.Drawing.Point(2, 56);
|
||||||
|
this.customDirectoryRb.Name = "customDirectoryRb";
|
||||||
|
this.customDirectoryRb.Size = new System.Drawing.Size(14, 13);
|
||||||
|
this.customDirectoryRb.TabIndex = 2;
|
||||||
|
this.customDirectoryRb.UseVisualStyleBackColor = true;
|
||||||
|
this.customDirectoryRb.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged);
|
||||||
|
//
|
||||||
|
// customTb
|
||||||
|
//
|
||||||
|
this.customTb.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.customTb.Location = new System.Drawing.Point(22, 52);
|
||||||
|
this.customTb.Name = "customTb";
|
||||||
|
this.customTb.Size = new System.Drawing.Size(588, 23);
|
||||||
|
this.customTb.TabIndex = 3;
|
||||||
|
//
|
||||||
|
// customBtn
|
||||||
|
//
|
||||||
|
this.customBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.customBtn.Location = new System.Drawing.Point(616, 52);
|
||||||
|
this.customBtn.Name = "customBtn";
|
||||||
|
this.customBtn.Size = new System.Drawing.Size(41, 27);
|
||||||
|
this.customBtn.TabIndex = 4;
|
||||||
|
this.customBtn.Text = "...";
|
||||||
|
this.customBtn.UseVisualStyleBackColor = true;
|
||||||
|
this.customBtn.Click += new System.EventHandler(this.customBtn_Click);
|
||||||
|
//
|
||||||
|
// directorySelectControl
|
||||||
|
//
|
||||||
|
this.directorySelectControl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.directorySelectControl.Location = new System.Drawing.Point(23, 0);
|
||||||
|
this.directorySelectControl.Name = "directorySelectControl";
|
||||||
|
this.directorySelectControl.Size = new System.Drawing.Size(635, 46);
|
||||||
|
this.directorySelectControl.TabIndex = 5;
|
||||||
|
//
|
||||||
|
// DirectoryOrCustomSelectControl
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.Controls.Add(this.directorySelectControl);
|
||||||
|
this.Controls.Add(this.customBtn);
|
||||||
|
this.Controls.Add(this.customTb);
|
||||||
|
this.Controls.Add(this.customDirectoryRb);
|
||||||
|
this.Controls.Add(this.knownDirectoryRb);
|
||||||
|
this.Name = "DirectoryOrCustomSelectControl";
|
||||||
|
this.Size = new System.Drawing.Size(660, 81);
|
||||||
|
this.Load += new System.EventHandler(this.DirectoryOrCustomSelectControl_Load);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.RadioButton knownDirectoryRb;
|
||||||
|
private System.Windows.Forms.RadioButton customDirectoryRb;
|
||||||
|
private System.Windows.Forms.TextBox customTb;
|
||||||
|
private System.Windows.Forms.Button customBtn;
|
||||||
|
private DirectorySelectControl directorySelectControl;
|
||||||
|
}
|
||||||
|
}
|
||||||
88
LibationWinForms/Dialogs/DirectoryOrCustomSelectControl.cs
Normal file
88
LibationWinForms/Dialogs/DirectoryOrCustomSelectControl.cs
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using Dinah.Core;
|
||||||
|
using FileManager;
|
||||||
|
|
||||||
|
namespace LibationWinForms.Dialogs
|
||||||
|
{
|
||||||
|
public partial class DirectoryOrCustomSelectControl : UserControl
|
||||||
|
{
|
||||||
|
public string SelectedDirectory
|
||||||
|
=> customDirectoryRb.Checked ? customTb.Text.Trim()
|
||||||
|
: knownDirectoryRb.Checked ? directorySelectControl.SelectedDirectory
|
||||||
|
: null;
|
||||||
|
|
||||||
|
public DirectoryOrCustomSelectControl()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
// doing this after InitializeComponent will fire event
|
||||||
|
this.knownDirectoryRb.Checked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Set items for combobox</summary>
|
||||||
|
/// <param name="knownDirectories">List rather than IEnumerable so that client can determine display order</param>
|
||||||
|
/// <param name="defaultDirectory"></param>
|
||||||
|
public void SetDirectoryItems(List<Configuration.KnownDirectories> knownDirectories, Configuration.KnownDirectories? defaultDirectory = Configuration.KnownDirectories.UserProfile)
|
||||||
|
=> this.directorySelectControl.SetDirectoryItems(knownDirectories, defaultDirectory);
|
||||||
|
|
||||||
|
/// <summary>select, set default, or rehydrate</summary>
|
||||||
|
/// <param name="directory"></param>
|
||||||
|
public void SelectDirectory(Configuration.KnownDirectories directory)
|
||||||
|
{
|
||||||
|
// if None: take no action
|
||||||
|
if (directory != Configuration.KnownDirectories.None)
|
||||||
|
selectDir(directory, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>select, set default, or rehydrate</summary>
|
||||||
|
public void SelectDirectory(string directory)
|
||||||
|
{
|
||||||
|
directory = directory?.Trim() ?? "";
|
||||||
|
selectDir(Configuration.GetKnownDirectory(directory), directory);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void selectDir(Configuration.KnownDirectories knownDir, string customDir)
|
||||||
|
{
|
||||||
|
var unknown = knownDir == Configuration.KnownDirectories.None;
|
||||||
|
customDirectoryRb.Checked = unknown;
|
||||||
|
knownDirectoryRb.Checked = !unknown;
|
||||||
|
this.directorySelectControl.SelectDirectory(knownDir);
|
||||||
|
this.customTb.Text = unknown ? customDir : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private string dirSearchTitle;
|
||||||
|
public void SetSearchTitle(string dirSearchTitle) => this.dirSearchTitle = dirSearchTitle?.Trim();
|
||||||
|
|
||||||
|
private void customBtn_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
using var dialog = new FolderBrowserDialog
|
||||||
|
{
|
||||||
|
Description = string.IsNullOrWhiteSpace(dirSearchTitle) ? "Search" : $"Search for {dirSearchTitle}",
|
||||||
|
SelectedPath = this.customTb.Text
|
||||||
|
};
|
||||||
|
dialog.ShowDialog();
|
||||||
|
if (!string.IsNullOrWhiteSpace(dialog.SelectedPath))
|
||||||
|
this.customTb.Text = dialog.SelectedPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void radioButton_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var isCustom = this.customDirectoryRb.Checked;
|
||||||
|
|
||||||
|
customTb.Enabled = isCustom;
|
||||||
|
customBtn.Enabled = isCustom;
|
||||||
|
|
||||||
|
directorySelectControl.Enabled = !isCustom;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DirectoryOrCustomSelectControl_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (this.DesignMode)
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
60
LibationWinForms/Dialogs/DirectoryOrCustomSelectControl.resx
Normal file
60
LibationWinForms/Dialogs/DirectoryOrCustomSelectControl.resx
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
76
LibationWinForms/Dialogs/DirectorySelectControl.Designer.cs
generated
Normal file
76
LibationWinForms/Dialogs/DirectorySelectControl.Designer.cs
generated
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
|
||||||
|
namespace LibationWinForms.Dialogs
|
||||||
|
{
|
||||||
|
partial class DirectorySelectControl
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Component Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.directoryComboBox = new System.Windows.Forms.ComboBox();
|
||||||
|
this.label1 = new System.Windows.Forms.Label();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// directoryComboBox
|
||||||
|
//
|
||||||
|
this.directoryComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.directoryComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
this.directoryComboBox.FormattingEnabled = true;
|
||||||
|
this.directoryComboBox.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.directoryComboBox.Name = "directoryComboBox";
|
||||||
|
this.directoryComboBox.Size = new System.Drawing.Size(647, 23);
|
||||||
|
this.directoryComboBox.TabIndex = 0;
|
||||||
|
this.directoryComboBox.SelectedIndexChanged += new System.EventHandler(this.directoryComboBox_SelectedIndexChanged);
|
||||||
|
//
|
||||||
|
// label1
|
||||||
|
//
|
||||||
|
this.label1.AutoSize = true;
|
||||||
|
this.label1.Location = new System.Drawing.Point(0, 26);
|
||||||
|
this.label1.Name = "label1";
|
||||||
|
this.label1.Size = new System.Drawing.Size(97, 15);
|
||||||
|
this.label1.TabIndex = 1;
|
||||||
|
this.label1.Text = "Select a directory";
|
||||||
|
//
|
||||||
|
// DirectorySelectControl
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.Controls.Add(this.label1);
|
||||||
|
this.Controls.Add(this.directoryComboBox);
|
||||||
|
this.Name = "DirectorySelectControl";
|
||||||
|
this.Size = new System.Drawing.Size(647, 46);
|
||||||
|
this.Load += new System.EventHandler(this.DirectorySelectControl_Load);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.ComboBox directoryComboBox;
|
||||||
|
private System.Windows.Forms.Label label1;
|
||||||
|
}
|
||||||
|
}
|
||||||
86
LibationWinForms/Dialogs/DirectorySelectControl.cs
Normal file
86
LibationWinForms/Dialogs/DirectorySelectControl.cs
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using Dinah.Core;
|
||||||
|
using FileManager;
|
||||||
|
|
||||||
|
namespace LibationWinForms.Dialogs
|
||||||
|
{
|
||||||
|
public partial class DirectorySelectControl : UserControl
|
||||||
|
{
|
||||||
|
private class DirectoryComboBoxItem
|
||||||
|
{
|
||||||
|
public string Description { get; }
|
||||||
|
public Configuration.KnownDirectories Value { get; }
|
||||||
|
|
||||||
|
public string FullPath => Configuration.GetKnownDirectoryPath(Value);
|
||||||
|
|
||||||
|
/// <summary>Displaying relative paths is confusing. UI should display absolute equivalent</summary>
|
||||||
|
public string UiDisplayPath => Value == Configuration.KnownDirectories.AppDir ? Configuration.AppDir_Absolute : FullPath;
|
||||||
|
|
||||||
|
public DirectoryComboBoxItem(Configuration.KnownDirectories knownDirectory)
|
||||||
|
{
|
||||||
|
Value = knownDirectory;
|
||||||
|
Description = Value.GetDescription();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString() => Description;
|
||||||
|
}
|
||||||
|
|
||||||
|
private DirectoryComboBoxItem selectedItem => (DirectoryComboBoxItem)this.directoryComboBox.SelectedItem;
|
||||||
|
public string SelectedDirectory => selectedItem?.FullPath;
|
||||||
|
|
||||||
|
public DirectorySelectControl() => InitializeComponent();
|
||||||
|
|
||||||
|
/// <summary>Set items for combobox</summary>
|
||||||
|
/// <param name="knownDirectories">List rather than IEnumerable so that client can determine display order</param>
|
||||||
|
/// <param name="defaultDirectory">Optional default item to select</param>
|
||||||
|
public void SetDirectoryItems(List<Configuration.KnownDirectories> knownDirectories, Configuration.KnownDirectories? defaultDirectory = Configuration.KnownDirectories.UserProfile)
|
||||||
|
{
|
||||||
|
this.directoryComboBox.Items.Clear();
|
||||||
|
|
||||||
|
foreach (var dir in knownDirectories.Where(d => d != Configuration.KnownDirectories.None).Distinct())
|
||||||
|
this.directoryComboBox.Items.Add(new DirectoryComboBoxItem(dir));
|
||||||
|
|
||||||
|
SelectDirectory(defaultDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>select, set default, or rehydrate</summary>
|
||||||
|
/// <param name="directory"></param>
|
||||||
|
/// <returns>True is there was a matching entry</returns>
|
||||||
|
public bool SelectDirectory(string directory) => SelectDirectory(Configuration.GetKnownDirectory(directory));
|
||||||
|
|
||||||
|
/// <summary>select, set default, or rehydrate</summary>
|
||||||
|
/// <param name="directory"></param>
|
||||||
|
/// <returns>True is there was a matching entry</returns>
|
||||||
|
public bool SelectDirectory(Configuration.KnownDirectories? directory)
|
||||||
|
{
|
||||||
|
if (directory is null || directory == Configuration.KnownDirectories.None)
|
||||||
|
{
|
||||||
|
this.directoryComboBox.SelectedIndex = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// set default
|
||||||
|
var item = this.directoryComboBox.Items.Cast<DirectoryComboBoxItem>().SingleOrDefault(item => item.Value == directory.Value);
|
||||||
|
if (item is null)
|
||||||
|
{
|
||||||
|
this.directoryComboBox.SelectedIndex = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.directoryComboBox.SelectedItem = item;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DirectorySelectControl_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (this.DesignMode)
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void directoryComboBox_SelectedIndexChanged(object sender, EventArgs e) => this.label1.Text = selectedItem.UiDisplayPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
60
LibationWinForms/Dialogs/DirectorySelectControl.resx
Normal file
60
LibationWinForms/Dialogs/DirectorySelectControl.resx
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
@ -26,9 +26,9 @@ namespace LibationWinForms.Dialogs
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
libationFilesDescLbl.Text = desc(nameof(config.LibationFiles));
|
libationFilesDescLbl.Text = desc(nameof(config.LibationFiles));
|
||||||
this.libationFilesRootRb.Text = "In the same folder that Libation is running from\r\n" + Configuration.AppDir;
|
this.libationFilesRootRb.Text = "In the same folder that Libation is running from\r\n" + Configuration.AppDir_Relative;
|
||||||
this.libationFilesMyDocsRb.Text = "In My Documents\r\n" + Configuration.MyDocs;
|
this.libationFilesMyDocsRb.Text = "In My Documents\r\n" + Configuration.MyDocs;
|
||||||
if (config.LibationFiles == Configuration.AppDir)
|
if (config.LibationFiles == Configuration.AppDir_Relative)
|
||||||
libationFilesRootRb.Checked = true;
|
libationFilesRootRb.Checked = true;
|
||||||
else if (config.LibationFiles == Configuration.MyDocs)
|
else if (config.LibationFiles == Configuration.MyDocs)
|
||||||
libationFilesMyDocsRb.Checked = true;
|
libationFilesMyDocsRb.Checked = true;
|
||||||
@ -52,7 +52,7 @@ namespace LibationWinForms.Dialogs
|
|||||||
private void saveBtn_Click(object sender, EventArgs e)
|
private void saveBtn_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var libationDir
|
var libationDir
|
||||||
= libationFilesRootRb.Checked ? Configuration.AppDir
|
= libationFilesRootRb.Checked ? Configuration.AppDir_Relative
|
||||||
: libationFilesMyDocsRb.Checked ? Configuration.MyDocs
|
: libationFilesMyDocsRb.Checked ? Configuration.MyDocs
|
||||||
: libationFilesCustomTb.Text;
|
: libationFilesCustomTb.Text;
|
||||||
if (!config.TrySetLibationFiles(libationDir))
|
if (!config.TrySetLibationFiles(libationDir))
|
||||||
|
|||||||
@ -43,10 +43,10 @@ namespace LibationWinForms.Dialogs
|
|||||||
|
|
||||||
switch (config.DownloadsInProgressEnum)
|
switch (config.DownloadsInProgressEnum)
|
||||||
{
|
{
|
||||||
case "LibationFiles":
|
case Configuration.LIBATION_FILES_LABEL:
|
||||||
downloadsInProgressLibationFilesRb.Checked = true;
|
downloadsInProgressLibationFilesRb.Checked = true;
|
||||||
break;
|
break;
|
||||||
case "WinTemp":
|
case Configuration.WIN_TEMP_LABEL:
|
||||||
default:
|
default:
|
||||||
downloadsInProgressWinTempRb.Checked = true;
|
downloadsInProgressWinTempRb.Checked = true;
|
||||||
break;
|
break;
|
||||||
@ -54,10 +54,10 @@ namespace LibationWinForms.Dialogs
|
|||||||
|
|
||||||
switch (config.DecryptInProgressEnum)
|
switch (config.DecryptInProgressEnum)
|
||||||
{
|
{
|
||||||
case "LibationFiles":
|
case Configuration.LIBATION_FILES_LABEL:
|
||||||
decryptInProgressLibationFilesRb.Checked = true;
|
decryptInProgressLibationFilesRb.Checked = true;
|
||||||
break;
|
break;
|
||||||
case "WinTemp":
|
case Configuration.WIN_TEMP_LABEL:
|
||||||
default:
|
default:
|
||||||
decryptInProgressWinTempRb.Checked = true;
|
decryptInProgressWinTempRb.Checked = true;
|
||||||
break;
|
break;
|
||||||
@ -77,8 +77,8 @@ namespace LibationWinForms.Dialogs
|
|||||||
private void saveBtn_Click(object sender, EventArgs e)
|
private void saveBtn_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
config.AllowLibationFixup = allowLibationFixupCbox.Checked;
|
config.AllowLibationFixup = allowLibationFixupCbox.Checked;
|
||||||
config.DownloadsInProgressEnum = downloadsInProgressLibationFilesRb.Checked ? "LibationFiles" : "WinTemp";
|
config.DownloadsInProgressEnum = downloadsInProgressLibationFilesRb.Checked ? Configuration.LIBATION_FILES_LABEL : Configuration.WIN_TEMP_LABEL;
|
||||||
config.DecryptInProgressEnum = decryptInProgressLibationFilesRb.Checked ? "LibationFiles" : "WinTemp";
|
config.DecryptInProgressEnum = decryptInProgressLibationFilesRb.Checked ? Configuration.LIBATION_FILES_LABEL : Configuration.WIN_TEMP_LABEL;
|
||||||
|
|
||||||
var newBooks = this.booksLocationTb.Text;
|
var newBooks = this.booksLocationTb.Text;
|
||||||
if (!Directory.Exists(newBooks))
|
if (!Directory.Exists(newBooks))
|
||||||
|
|||||||
81
LibationWinForms/Dialogs/TEMP_TestNewControls.Designer.cs
generated
Normal file
81
LibationWinForms/Dialogs/TEMP_TestNewControls.Designer.cs
generated
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
|
||||||
|
namespace LibationWinForms.Dialogs
|
||||||
|
{
|
||||||
|
partial class TEMP_TestNewControls
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.button1 = new System.Windows.Forms.Button();
|
||||||
|
this.directorySelectControl1 = new LibationWinForms.Dialogs.DirectorySelectControl();
|
||||||
|
this.directoryOrCustomSelectControl1 = new LibationWinForms.Dialogs.DirectoryOrCustomSelectControl();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// button1
|
||||||
|
//
|
||||||
|
this.button1.Location = new System.Drawing.Point(438, 375);
|
||||||
|
this.button1.Name = "button1";
|
||||||
|
this.button1.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.button1.TabIndex = 2;
|
||||||
|
this.button1.Text = "button1";
|
||||||
|
this.button1.UseVisualStyleBackColor = true;
|
||||||
|
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||||
|
//
|
||||||
|
// directorySelectControl1
|
||||||
|
//
|
||||||
|
this.directorySelectControl1.Location = new System.Drawing.Point(30, 54);
|
||||||
|
this.directorySelectControl1.Name = "directorySelectControl1";
|
||||||
|
this.directorySelectControl1.Size = new System.Drawing.Size(758, 46);
|
||||||
|
this.directorySelectControl1.TabIndex = 4;
|
||||||
|
//
|
||||||
|
// directoryOrCustomSelectControl1
|
||||||
|
//
|
||||||
|
this.directoryOrCustomSelectControl1.Location = new System.Drawing.Point(128, 199);
|
||||||
|
this.directoryOrCustomSelectControl1.Name = "directoryOrCustomSelectControl1";
|
||||||
|
this.directoryOrCustomSelectControl1.Size = new System.Drawing.Size(660, 81);
|
||||||
|
this.directoryOrCustomSelectControl1.TabIndex = 5;
|
||||||
|
//
|
||||||
|
// TEMP_TestNewControls
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(800, 450);
|
||||||
|
this.Controls.Add(this.directoryOrCustomSelectControl1);
|
||||||
|
this.Controls.Add(this.directorySelectControl1);
|
||||||
|
this.Controls.Add(this.button1);
|
||||||
|
this.Name = "TEMP_TestNewControls";
|
||||||
|
this.Text = "TEMP_TestNewControls";
|
||||||
|
this.Load += new System.EventHandler(this.TEMP_TestNewControls_Load);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
private System.Windows.Forms.Button button1;
|
||||||
|
private DirectorySelectControl directorySelectControl1;
|
||||||
|
private DirectoryOrCustomSelectControl directoryOrCustomSelectControl1;
|
||||||
|
}
|
||||||
|
}
|
||||||
76
LibationWinForms/Dialogs/TEMP_TestNewControls.cs
Normal file
76
LibationWinForms/Dialogs/TEMP_TestNewControls.cs
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace LibationWinForms.Dialogs
|
||||||
|
{
|
||||||
|
public partial class TEMP_TestNewControls : Form
|
||||||
|
{
|
||||||
|
public TEMP_TestNewControls()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TEMP_TestNewControls_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (this.DesignMode)
|
||||||
|
return;
|
||||||
|
|
||||||
|
{
|
||||||
|
var dirCtrl = this.directorySelectControl1;
|
||||||
|
dirCtrl.SetDirectoryItems(new()
|
||||||
|
{
|
||||||
|
FileManager.Configuration.KnownDirectories.AppDir,
|
||||||
|
FileManager.Configuration.KnownDirectories.MyDocs,
|
||||||
|
FileManager.Configuration.KnownDirectories.LibationFiles,
|
||||||
|
FileManager.Configuration.KnownDirectories.MyDocs,
|
||||||
|
FileManager.Configuration.KnownDirectories.None,
|
||||||
|
FileManager.Configuration.KnownDirectories.WinTemp,
|
||||||
|
FileManager.Configuration.KnownDirectories.UserProfile
|
||||||
|
}
|
||||||
|
,
|
||||||
|
FileManager.Configuration.KnownDirectories.MyDocs
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var dirOrCustCtrl = this.directoryOrCustomSelectControl1;
|
||||||
|
dirOrCustCtrl.SetSearchTitle("Libation Files");
|
||||||
|
dirOrCustCtrl.SetDirectoryItems(new()
|
||||||
|
{
|
||||||
|
FileManager.Configuration.KnownDirectories.AppDir,
|
||||||
|
FileManager.Configuration.KnownDirectories.MyDocs,
|
||||||
|
FileManager.Configuration.KnownDirectories.LibationFiles,
|
||||||
|
FileManager.Configuration.KnownDirectories.MyDocs,
|
||||||
|
FileManager.Configuration.KnownDirectories.None,
|
||||||
|
FileManager.Configuration.KnownDirectories.WinTemp,
|
||||||
|
FileManager.Configuration.KnownDirectories.UserProfile
|
||||||
|
}
|
||||||
|
,
|
||||||
|
FileManager.Configuration.KnownDirectories.MyDocs
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void button1_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var dirCtrl = this.directorySelectControl1;
|
||||||
|
var dirOrCustCtrl = this.directoryOrCustomSelectControl1;
|
||||||
|
|
||||||
|
var x = dirCtrl.SelectedDirectory;
|
||||||
|
var y = dirOrCustCtrl.SelectedDirectory;
|
||||||
|
|
||||||
|
dirCtrl.SelectDirectory(FileManager.Configuration.KnownDirectories.UserProfile);
|
||||||
|
dirOrCustCtrl.SelectDirectory(FileManager.Configuration.KnownDirectories.UserProfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
60
LibationWinForms/Dialogs/TEMP_TestNewControls.resx
Normal file
60
LibationWinForms/Dialogs/TEMP_TestNewControls.resx
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
Loading…
x
Reference in New Issue
Block a user