From abaa7e5e886ce49a827ec5a5a53fc0b938e89496 Mon Sep 17 00:00:00 2001 From: "Valeriano A.R" Date: Fri, 2 Nov 2018 12:52:12 +0100 Subject: [PATCH] FrmProxyCmdConfig: Basic ProxyCmd Configurator. --- VAR.Toolbox/UI/FrmProxyCmd.cs | 73 ++------ VAR.Toolbox/UI/FrmProxyCmdConfig.Designer.cs | 131 ++++++++++++++ VAR.Toolbox/UI/FrmProxyCmdConfig.cs | 169 +++++++++++++++++++ VAR.Toolbox/UI/FrmToolbox.cs | 29 +++- VAR.Toolbox/VAR.Toolbox.csproj | 6 + 5 files changed, 348 insertions(+), 60 deletions(-) create mode 100644 VAR.Toolbox/UI/FrmProxyCmdConfig.Designer.cs create mode 100644 VAR.Toolbox/UI/FrmProxyCmdConfig.cs diff --git a/VAR.Toolbox/UI/FrmProxyCmd.cs b/VAR.Toolbox/UI/FrmProxyCmd.cs index dfac5cb..25ca0d7 100644 --- a/VAR.Toolbox/UI/FrmProxyCmd.cs +++ b/VAR.Toolbox/UI/FrmProxyCmd.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.IO; using System.Threading; using System.Windows.Forms; using VAR.Toolbox.Code; @@ -53,7 +52,7 @@ namespace VAR.Toolbox.UI } return; } - if(e.KeyCode == Keys.Enter) + if (e.KeyCode == Keys.Enter) { e.Handled = true; return; @@ -72,7 +71,7 @@ namespace VAR.Toolbox.UI { _currentHistoryIndex = 0; } - if (_currentHistoryIndex>=0 && _currentHistoryIndex < _cmdHistory.Count) + if (_currentHistoryIndex >= 0 && _currentHistoryIndex < _cmdHistory.Count) { txtInput.Text = _cmdHistory[_currentHistoryIndex]; txtInput.SelectionStart = txtInput.Text.Length; @@ -109,7 +108,7 @@ namespace VAR.Toolbox.UI private void btnConfig_Click(object sender, EventArgs e) { - throw new NotImplementedException("Implement btnConfig_Click"); + FrmToolbox.StaticCreateWindow(typeof(FrmProxyCmdConfig)); } #endregion UI events @@ -128,7 +127,7 @@ namespace VAR.Toolbox.UI private void CleanProxyCmdExecutor() { IDisposable disposableProxyCmdExecutor = _proxyCmdExecutor as IDisposable; - if (disposableProxyCmdExecutor !=null) + if (disposableProxyCmdExecutor != null) { disposableProxyCmdExecutor.Dispose(); } @@ -155,7 +154,7 @@ namespace VAR.Toolbox.UI } Monitor.Exit(_executionLock); } - + public void OutputLine(string line) { BeginInvoke(new MethodInvoker(delegate @@ -173,61 +172,28 @@ namespace VAR.Toolbox.UI public void LoadConfig() { CleanProxyCmdExecutor(); - string configFile = GetConfigFileName(); - string[] config = null; - if (File.Exists(configFile) == false) - { - config = new string[] { "Dummy|Dummy:" }; - } - else - { - config = File.ReadAllLines(configFile); - } - SetLoadedConfig(config); - } + + List configItems = FrmProxyCmdConfig.GetConfigurationItems(); - private void SetLoadedConfig(string[] configLines) - { string previousSelectedName = null; ProxyCmdConfigItem selectedConfig = ddlCurrentConfig.SelectedItem as ProxyCmdConfigItem; if (selectedConfig != null) { previousSelectedName = selectedConfig.Name; } - ddlCurrentConfig.Items.Clear(); - foreach (string configLine in configLines) + ddlCurrentConfig.Items.AddRange(configItems.ToArray()); + ddlCurrentConfig.SelectedIndex = 0; + if (string.IsNullOrEmpty(previousSelectedName) == false) { - int idxSplit = configLine.IndexOf('|'); - if(idxSplit < 0) { continue; } - string configName = configLine.Substring(0, idxSplit); - string configData = configLine.Substring(idxSplit + 1); - - ddlCurrentConfig.Items.Add(new ProxyCmdConfigItem { Name = configName, Config = configData, }); - } - if (string.IsNullOrEmpty(previousSelectedName)) - { - ddlCurrentConfig.SelectedIndex = 0; - return; - } - - foreach(ProxyCmdConfigItem configItem in ddlCurrentConfig.Items) - { - if(configItem.Name == previousSelectedName) + foreach (ProxyCmdConfigItem configItem in ddlCurrentConfig.Items) { - ddlCurrentConfig.SelectedItem = configItem; - break; + if (configItem.Name == previousSelectedName) + { + ddlCurrentConfig.SelectedItem = configItem; + break; + } } } } - private string GetConfigFileName() - { - string location = System.Reflection.Assembly.GetEntryAssembly().Location; - string path = Path.GetDirectoryName(location); - string filenameWithoutExtension = Path.GetFileNameWithoutExtension(location); - - string configFile = string.Format("{0}/{1}.ProxyCmd.cfg", path, filenameWithoutExtension); - return configFile; - } - private string GetCurrentConfig() { ProxyCmdConfigItem selectedConfig = ddlCurrentConfig.SelectedItem as ProxyCmdConfigItem; @@ -237,11 +203,4 @@ namespace VAR.Toolbox.UI #endregion Config } - - public class ProxyCmdConfigItem - { - public string Name { get; set; } - public string Config { get; set; } - public override string ToString() { return Name; } - } } diff --git a/VAR.Toolbox/UI/FrmProxyCmdConfig.Designer.cs b/VAR.Toolbox/UI/FrmProxyCmdConfig.Designer.cs new file mode 100644 index 0000000..c55dad4 --- /dev/null +++ b/VAR.Toolbox/UI/FrmProxyCmdConfig.Designer.cs @@ -0,0 +1,131 @@ +namespace VAR.Toolbox.UI +{ + partial class FrmProxyCmdConfig + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lsvCmdProxyConfigs = new System.Windows.Forms.ListBox(); + this.txtCmdProxyConfigName = new System.Windows.Forms.TextBox(); + this.btnSave = new System.Windows.Forms.Button(); + this.btnDelete = new System.Windows.Forms.Button(); + this.btnNew = new System.Windows.Forms.Button(); + this.txtCmdProxyConfigContent = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // lsvCmdProxyConfigs + // + this.lsvCmdProxyConfigs.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.lsvCmdProxyConfigs.FormattingEnabled = true; + this.lsvCmdProxyConfigs.Location = new System.Drawing.Point(13, 13); + this.lsvCmdProxyConfigs.Name = "lsvCmdProxyConfigs"; + this.lsvCmdProxyConfigs.Size = new System.Drawing.Size(149, 355); + this.lsvCmdProxyConfigs.TabIndex = 0; + this.lsvCmdProxyConfigs.SelectedIndexChanged += new System.EventHandler(this.lsvCmdProxyConfigs_SelectedIndexChanged); + // + // txtCmdProxyConfigName + // + this.txtCmdProxyConfigName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtCmdProxyConfigName.Location = new System.Drawing.Point(169, 13); + this.txtCmdProxyConfigName.Name = "txtCmdProxyConfigName"; + this.txtCmdProxyConfigName.Size = new System.Drawing.Size(315, 20); + this.txtCmdProxyConfigName.TabIndex = 2; + // + // btnSave + // + this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnSave.Location = new System.Drawing.Point(409, 351); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(75, 23); + this.btnSave.TabIndex = 3; + this.btnSave.Text = "Save"; + this.btnSave.UseVisualStyleBackColor = true; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // btnDelete + // + this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnDelete.Location = new System.Drawing.Point(328, 351); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(75, 23); + this.btnDelete.TabIndex = 4; + this.btnDelete.Text = "Delete"; + this.btnDelete.UseVisualStyleBackColor = true; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // btnNew + // + this.btnNew.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnNew.Location = new System.Drawing.Point(247, 351); + this.btnNew.Name = "btnNew"; + this.btnNew.Size = new System.Drawing.Size(75, 23); + this.btnNew.TabIndex = 5; + this.btnNew.Text = "New"; + this.btnNew.UseVisualStyleBackColor = true; + this.btnNew.Click += new System.EventHandler(this.btnNew_Click); + // + // txtCmdProxyConfigContent + // + this.txtCmdProxyConfigContent.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtCmdProxyConfigContent.Location = new System.Drawing.Point(168, 39); + this.txtCmdProxyConfigContent.Multiline = true; + this.txtCmdProxyConfigContent.Name = "txtCmdProxyConfigContent"; + this.txtCmdProxyConfigContent.Size = new System.Drawing.Size(316, 306); + this.txtCmdProxyConfigContent.TabIndex = 6; + // + // FrmProxyCmdConfig + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(496, 386); + this.Controls.Add(this.txtCmdProxyConfigContent); + this.Controls.Add(this.btnNew); + this.Controls.Add(this.btnDelete); + this.Controls.Add(this.btnSave); + this.Controls.Add(this.txtCmdProxyConfigName); + this.Controls.Add(this.lsvCmdProxyConfigs); + this.MinimumSize = new System.Drawing.Size(440, 250); + this.Name = "FrmProxyCmdConfig"; + this.Text = "ProxyCmdConfig"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListBox lsvCmdProxyConfigs; + private System.Windows.Forms.TextBox txtCmdProxyConfigName; + private System.Windows.Forms.Button btnSave; + private System.Windows.Forms.Button btnDelete; + private System.Windows.Forms.Button btnNew; + private System.Windows.Forms.TextBox txtCmdProxyConfigContent; + } +} \ No newline at end of file diff --git a/VAR.Toolbox/UI/FrmProxyCmdConfig.cs b/VAR.Toolbox/UI/FrmProxyCmdConfig.cs new file mode 100644 index 0000000..2d0ccb7 --- /dev/null +++ b/VAR.Toolbox/UI/FrmProxyCmdConfig.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Windows.Forms; + +namespace VAR.Toolbox.UI +{ + public partial class FrmProxyCmdConfig : Form + { + public FrmProxyCmdConfig() + { + InitializeComponent(); + + LoadData(); + } + + + private void lsvCmdProxyConfigs_SelectedIndexChanged(object sender, EventArgs e) + { + ProxyCmdConfigItem selectedConfig = lsvCmdProxyConfigs.SelectedItem as ProxyCmdConfigItem; + if (selectedConfig == null) { CleanConfig(); return; } + ShowConfig(selectedConfig); + } + + private void btnSave_Click(object sender, EventArgs e) + { + SaveConfig(); + } + + private void btnDelete_Click(object sender, EventArgs e) + { + DeleteSelected(); + } + + private void btnNew_Click(object sender, EventArgs e) + { + CreateNew(); + } + + private void LoadData() + { + lsvCmdProxyConfigs.Items.Clear(); + List configItems = FrmProxyCmdConfig.GetConfigurationItems(); + lsvCmdProxyConfigs.Items.AddRange(configItems.ToArray()); + } + + private void SaveData() + { + StringBuilder sbConfig = new StringBuilder(); + foreach (object o in lsvCmdProxyConfigs.Items) + { + ProxyCmdConfigItem config = o as ProxyCmdConfigItem; + if (config == null) { continue; } + sbConfig.AppendFormat("{0}|{1}\n", config.Name, config.Config); + } + string configFileName = GetConfigFileName(); + File.WriteAllText(configFileName, sbConfig.ToString()); + + List listForms = FrmToolbox.StaticGetWindowsOfType(); + foreach (FrmProxyCmd frm in listForms) + { + frm.LoadConfig(); + } + } + + private void CleanConfig() + { + txtCmdProxyConfigName.Text = string.Empty; + txtCmdProxyConfigContent.Text = string.Empty; + } + + private void ShowConfig(ProxyCmdConfigItem config) + { + txtCmdProxyConfigName.Text = config.Name; + txtCmdProxyConfigContent.Text = config.Config; + } + + private void SaveConfig() + { + ProxyCmdConfigItem selectedConfig = lsvCmdProxyConfigs.SelectedItem as ProxyCmdConfigItem; + if (selectedConfig == null) + { + selectedConfig = new ProxyCmdConfigItem(); + selectedConfig.Name = txtCmdProxyConfigName.Text; + selectedConfig.Config = txtCmdProxyConfigContent.Text; + lsvCmdProxyConfigs.Items.Add(selectedConfig); + } + else + { + selectedConfig.Name = txtCmdProxyConfigName.Text; + selectedConfig.Config = txtCmdProxyConfigContent.Text; + } + SaveData(); + } + + private void DeleteSelected() + { + ProxyCmdConfigItem selectedConfig = lsvCmdProxyConfigs.SelectedItem as ProxyCmdConfigItem; + if (selectedConfig == null) { return; } + List configItems = new List(); + foreach (object o in lsvCmdProxyConfigs.Items) + { + ProxyCmdConfigItem config = o as ProxyCmdConfigItem; + if (config == null) { continue; } + if (config.Name == selectedConfig.Name) { continue; } + configItems.Add(config); + } + lsvCmdProxyConfigs.Items.Clear(); + lsvCmdProxyConfigs.Items.AddRange(configItems.ToArray()); + SaveData(); + CleanConfig(); + } + + private void CreateNew() + { + lsvCmdProxyConfigs.SelectedIndex = -1; + CleanConfig(); + } + + public static string GetConfigFileName() + { + string location = System.Reflection.Assembly.GetEntryAssembly().Location; + string path = Path.GetDirectoryName(location); + string filenameWithoutExtension = Path.GetFileNameWithoutExtension(location); + + string configFile = string.Format("{0}/{1}.ProxyCmd.cfg", path, filenameWithoutExtension); + return configFile; + } + + public static string[] GetConfigurationLines() + { + string configFile = GetConfigFileName(); + string[] config = null; + if (File.Exists(configFile) == false) + { + config = new string[] { "Dummy|Dummy:" }; + } + else + { + config = File.ReadAllLines(configFile); + } + return config; + } + + public static List GetConfigurationItems() + { + string[] configLines = GetConfigurationLines(); + List configItems = new List(); + foreach (string configLine in configLines) + { + int idxSplit = configLine.IndexOf('|'); + if (idxSplit < 0) { continue; } + string configName = configLine.Substring(0, idxSplit); + string configData = configLine.Substring(idxSplit + 1); + + configItems.Add(new ProxyCmdConfigItem { Name = configName, Config = configData, }); + } + return configItems; + } + } + + public class ProxyCmdConfigItem + { + public string Name { get; set; } + public string Config { get; set; } + public override string ToString() { return Name; } + } +} diff --git a/VAR.Toolbox/UI/FrmToolbox.cs b/VAR.Toolbox/UI/FrmToolbox.cs index 8327708..3a3a131 100644 --- a/VAR.Toolbox/UI/FrmToolbox.cs +++ b/VAR.Toolbox/UI/FrmToolbox.cs @@ -14,6 +14,8 @@ namespace VAR.Toolbox.UI private NotifyIcon niTray = null; + private static FrmToolbox _currentInstance = null; + #endregion Declarations #region Form life cycle @@ -26,6 +28,8 @@ namespace VAR.Toolbox.UI MouseDown += DragWindow_MouseDown; lblToolbox.MouseDown += DragWindow_MouseDown; + + _currentInstance = this; } private void InitializeCustomControls() @@ -94,7 +98,7 @@ namespace VAR.Toolbox.UI ShowChildWindows(); WindowState = FormWindowState.Normal; } - + private void btnCoder_Click(object sender, EventArgs e) { CreateWindow(typeof(FrmCoder)); @@ -142,7 +146,7 @@ namespace VAR.Toolbox.UI private Form CreateWindow(Type type) { Form frm = Activator.CreateInstance(type) as Form; - if(frm== null) + if (frm == null) { return null; } @@ -155,7 +159,7 @@ namespace VAR.Toolbox.UI frm.Show(); return frm; } - + private List
_forms = new List(); private void frmChild_FormClosing(object sender, FormClosingEventArgs e) @@ -208,6 +212,25 @@ namespace VAR.Toolbox.UI } } + public static void StaticCreateWindow(Type type) + { + _currentInstance?.CreateWindow(type); + } + + public static List StaticGetWindowsOfType() + { + List list = new List(); + if (_currentInstance == null) { return list; } + foreach (Form frm in _currentInstance._forms) + { + if (frm is T) + { + list.Add((T)(object)frm); + } + } + return list; + } + #endregion Window handling } diff --git a/VAR.Toolbox/VAR.Toolbox.csproj b/VAR.Toolbox/VAR.Toolbox.csproj index 531f342..f2f78da 100644 --- a/VAR.Toolbox/VAR.Toolbox.csproj +++ b/VAR.Toolbox/VAR.Toolbox.csproj @@ -129,6 +129,12 @@ FrmProxyCmd.cs + + Form + + + FrmProxyCmdConfig.cs + Form