diff --git a/mRemoteV1/Tools/ADhelper.cs b/mRemoteV1/Tools/ADhelper.cs new file mode 100644 index 000000000..bf9276279 --- /dev/null +++ b/mRemoteV1/Tools/ADhelper.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections; +using System.DirectoryServices; +using System.Runtime.InteropServices; + +namespace mRemoteNG.Tools +{ + public class ADhelper + { + private DirectoryEntry _dEntry; + + public ADhelper(string domain) + { + Children = new Hashtable(); + Domain = domain; + } + + public Hashtable Children { get; } + + private string Domain { get; } + + public void GetChildEntries(string adPath = "") + { + _dEntry = adPath.Length <= 0 + ? Domain.Length <= 0 ? new DirectoryEntry() : new DirectoryEntry("LDAP://" + Domain) + : new DirectoryEntry(adPath); + try + { + foreach (DirectoryEntry child in _dEntry.Children) + Children.Add(child.Name, child.Path); + } + catch (COMException ex) + { + if (ex.Message.ToLower().Equals("the server is not operational")) + throw new Exception("Could not find AD Server", ex); + } + } + } +} \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/AdTree.Designer.cs b/mRemoteV1/UI/Controls/AdTree.Designer.cs new file mode 100644 index 000000000..48e63dd0c --- /dev/null +++ b/mRemoteV1/UI/Controls/AdTree.Designer.cs @@ -0,0 +1,73 @@ +namespace mRemoteNG.UI.Controls +{ + partial class AdTree + { + /// + /// 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.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AdTree)); + this.tvActiveDirectory = new System.Windows.Forms.TreeView(); + this.ImglTree = new System.Windows.Forms.ImageList(this.components); + this.SuspendLayout(); + // + // tvActiveDirectory + // + this.tvActiveDirectory.Dock = System.Windows.Forms.DockStyle.Fill; + this.tvActiveDirectory.Location = new System.Drawing.Point(0, 0); + this.tvActiveDirectory.Name = "tvActiveDirectory"; + this.tvActiveDirectory.Size = new System.Drawing.Size(800, 450); + this.tvActiveDirectory.TabIndex = 0; + this.tvActiveDirectory.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.TvActiveDirectory_AfterExpand); + this.tvActiveDirectory.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TvActiveDirectory_AfterSelect); + // + // ImglTree + // + this.ImglTree.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ImglTree.ImageStream"))); + this.ImglTree.TransparentColor = System.Drawing.Color.Transparent; + this.ImglTree.Images.SetKeyName(0, "Root.png"); + this.ImglTree.Images.SetKeyName(1, "OU.png"); + this.ImglTree.Images.SetKeyName(2, "Folder.png"); + this.ImglTree.Images.SetKeyName(3, "Question.png"); + // + // AdTree + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.Controls.Add(this.tvActiveDirectory); + this.Name = "AdTree"; + this.Size = new System.Drawing.Size(800, 450); + this.Load += new System.EventHandler(this.AdTree_Load); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TreeView tvActiveDirectory; + private System.Windows.Forms.ImageList ImglTree; + } +} \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/AdTree.cs b/mRemoteV1/UI/Controls/AdTree.cs new file mode 100644 index 000000000..feb64a2e2 --- /dev/null +++ b/mRemoteV1/UI/Controls/AdTree.cs @@ -0,0 +1,123 @@ +using mRemoteNG.Tools; +using System; +using System.Runtime.CompilerServices; +using System.Windows.Forms; + +namespace mRemoteNG.UI.Controls +{ + public partial class AdTree : UserControl + { + #region Public Methods + + public AdTree() + { + InitializeComponent(); + } + + public event AdPathChangedEventHandler AdPathChanged; + + public delegate void AdPathChangedEventHandler(object sender); + + public string AdPath { get; set; } + + public string Domain + { + private get => string.IsNullOrEmpty(_domain) == false ? _domain : Environment.UserDomainName; + set => _domain = value; + } + + public object SelectedNode { get; internal set; } + + #endregion Public Methods + + #region Private Methods + + private string _domain; + + private void TvActiveDirectory_AfterExpand(object sender, TreeViewEventArgs e) + { + try + { + foreach (TreeNode node in e.Node.Nodes) + AddTreeNodes(node); + } + catch (Exception ex) + { + Console.WriteLine(ex.StackTrace); + } + } + + private void TvActiveDirectory_AfterSelect(object sender, TreeViewEventArgs e) + { + AdPath = e.Node.Tag.ToString(); + var pathChangedEvent = AdPathChanged; + pathChangedEvent?.Invoke(this); + } + + private void AdTree_Load(object sender, EventArgs e) + { + tvActiveDirectory.Nodes.Clear(); + var treeNode = new TreeNode(Domain) { Tag = "" }; + tvActiveDirectory.Nodes.Add(treeNode); + AddTreeNodes(treeNode); + tvActiveDirectory.Nodes[0].Expand(); + } + + private void AddTreeNodes(TreeNode tNode) + { + var adhelper = new ADhelper(Domain); + adhelper.GetChildEntries(tNode.Tag.ToString()); + var enumerator = adhelper.Children.GetEnumerator(); + tvActiveDirectory.BeginUpdate(); + while (enumerator.MoveNext()) + { + var flag1 = false; + if (enumerator.Key == null) continue; + var node1 = new TreeNode(enumerator.Key.ToString().Substring(3)) + { + Tag = RuntimeHelpers.GetObjectValue(enumerator.Value) + }; + if (!enumerator.Key.ToString().Substring(0, 2).Equals("CN") || + enumerator.Key.ToString().Equals("CN=Computers") || + enumerator.Key.ToString().Equals("CN=Users")) + flag1 = true; + + if (flag1) + { + var flag2 = false; + try + { + foreach (TreeNode node2 in tNode.Nodes) + { + if (!node2.Text.Equals(node1.Text)) continue; + flag2 = true; + break; + } + } + catch (Exception ex) + { + Console.WriteLine(ex.StackTrace); + } + + if (!flag2) + tNode.Nodes.Add(node1); + } + + var imageIndex = GetImageIndex(enumerator.Key.ToString().Substring(0, 2)); + node1.ImageIndex = imageIndex; + node1.SelectedImageIndex = imageIndex; + } + + tvActiveDirectory.EndUpdate(); + } + + private static int GetImageIndex(string objType) + { + if (objType.Equals("CN")) + return 2; + return objType.Equals("OU") ? 1 : 3; + } + + #endregion Private Methods + } +} diff --git a/mRemoteV1/UI/Controls/AdTree.resx b/mRemoteV1/UI/Controls/AdTree.resx new file mode 100644 index 000000000..6e89531ad --- /dev/null +++ b/mRemoteV1/UI/Controls/AdTree.resx @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA4 + DAAAAk1TRnQBSQFMAgEBBAEAARgBAAEYAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ACAAC/wH0 + A/MC9AL/CwAB9AH3AQcB/yYAAf8B9AHxAbsBtAGtAc8BtAG1AfEC/wcAA/8CtAEHAf8lAAL/AfABiwFl + AYYBrQHPAa0BhgGtAd0B/wUAAv8B8wHwAbUBuwGRAZIB8gH0Af8CAAHsAesBbQHqARMBFQERAQ8HDgEA + AewB6wFtAeoBEwEVAREBDwcOAwAB/wGLAQ0BiwG0AgkBtAHPAWwBiwH/BAAB/wHyAfcB7AHtAbUBCQG0 + AesB7AH3AfEB/wEAAewBmgF6AVgFUgFRAUsBKgJLAQ8BAAHsAZoBegFYBVIBUQFLASoCSwEPAwABtQFm + AWwBrgGRA7UBrgFsAWYBtAMAAf8BvAGRArUBuwEJARkBCQG1AbQB6wHsAfAB/wHsAaABmgF5AhUBUgF6 + AVkBSwEAASoBMQFLAREBAAHsAaACmgR6AVkBUwJSATEBSwERAgAB8gFsAe8BtQKLAbUBCQG1AWwBZgJl + AfIBAAH/AbwBtQEJAhkBCQGmAa0CGQEJAbUBrgHsAfEB7AEaAaABSgJ5AUoBegFZAQABUgEAAVIBKgFD + AQAB7AEaAaACmgN6AlkBUwJSASoBQwEAAfQB7QFlAZEBrQGmAa0BCQH/AbsBiwFlAmYBrgL0AbUBCQMZ + AbUBCgFlAxkBCQG1AesBkgHtAcMBoAEAApoBAAJ6AQABWQEAAVIBMQEUAQAB7QHDAqACmgN6AlkBUwFS + ATEBFAEAAfMBZgFlAaYCrAGtAgkBtAKLAZEBbAFmAfEBBwEJBRkBuwEJBBkBCQG1AW0B7QHDAaABSgGZ + AXkBSgJ6AQABWQEAAVIBMQESAQAB7QHDAqACmgR6AlkBUgExARIBAAHxAmUBigGsAbMB2wG6AbMBrAGK + AbQBBwGRAWYBvAEHBRkB9AG0AQkB/wQZAbsB6wEcAsMBmQIUAXkCegEAAXoBAAFSATEB6gEAARwDwwGg + ApoEegFZAVIBMQHqAQAB8QKmAa0BswHbARkB3AGtAqwBiwGRAa4BZgG8AQcBGQH0AxkB/wG1AYYBGQH0 + AxkBCQHsARwDwwKgApoEegFZAVIB6wEAARwDwwKgApoEegFZAVIB6wEAAfQBiwGGAdUC3AEZAdsCswKt + AosBbAHyAbwF9AEZAf8CpgEJAfQCGQEJAe0BHAXDAqACmgR6AesBAAEcBcMCoAKaBHoB6wEAAf8BCQGt + AdsB3AIZAdwB1QIJAa0CiwGSAf8B8AH0Af8B9AH/AbQBpgEJAa4BXwG0Av8B9AG7AbwKHATtAewBAAoc + BO0B7AIAAf8BzgG0AfAB9AH/ARkB3AHdAQkBswGLAWYB9AEAAfQB8gP/AbUBXwEJAYYBXwG7Av8B8wHv + AfQBHAEaAsMBoAGaARwB8QgAARwBGgLDAaABmgEcAfEKAAHzAYsBBwL/AfQCCQK0AYsBvAMAAvMD/wG1 + Aa0BhgG1Av8B9AG8AfQBAAHxBRwB8QkAAfEFHAHxDAAB8wG0AbsB8gHwAbsCtAGLAfAFAALzB/8B9AHw + Af8mAAH/AfACtAGRAbQBCQH/BwAB/wLzAfQB9gH/AfQB8wH0Af8jAAFCAU0BPgcAAT4DAAEoAwABQAMA + ASADAAEBAQABAQYAAQEWAAP/gQAB4AEHAf8BDwT/AcABAwH4AQ8E/wGAAQMB4AEDAQABAQEAAQEBwAED + AcABAQEAAQEBAAEBAcABAwGAAgABAQEAAQEBgAEBAwABAQEAAQEFAAEBAQABAQUAAQEBAAEBBQABAQEA + AQEFAAEBAQABAQUAAQEBAAEBBQABAQEAAQEBgAEBAwAB/wEAAf8BwAEDAYACAQH/AQEB/wHgAQcBwAED + BP8B8AEPAeABBwT/Cw== + + + \ No newline at end of file diff --git a/mRemoteV1/UI/Window/ActiveDirectoryImportWindow.Designer.cs b/mRemoteV1/UI/Window/ActiveDirectoryImportWindow.Designer.cs index 8593b2e0b..4aaa8305f 100644 --- a/mRemoteV1/UI/Window/ActiveDirectoryImportWindow.Designer.cs +++ b/mRemoteV1/UI/Window/ActiveDirectoryImportWindow.Designer.cs @@ -1,10 +1,7 @@  - -using mRemoteNG.Themes; - namespace mRemoteNG.UI.Window { - public partial class ActiveDirectoryImportWindow : BaseWindow + public partial class ActiveDirectoryImportWindow { #region Windows Form Designer generated code private void InitializeComponent() @@ -13,7 +10,7 @@ namespace mRemoteNG.UI.Window this.txtDomain = new mRemoteNG.UI.Controls.Base.NGTextBox(); this.lblDomain = new mRemoteNG.UI.Controls.Base.NGLabel(); this.btnChangeDomain = new mRemoteNG.UI.Controls.Base.NGButton(); - this.ActiveDirectoryTree = new ADTree.ADtree(); + this.activeDirectoryTree = new mRemoteNG.UI.Controls.AdTree(); this.btnClose = new mRemoteNG.UI.Controls.Base.NGButton(); this.chkSubOU = new mRemoteNG.UI.Controls.Base.NGCheckBox(); this.SuspendLayout(); @@ -28,7 +25,7 @@ namespace mRemoteNG.UI.Window this.btnImport.TabIndex = 4; this.btnImport.Text = "&Import"; this.btnImport.UseVisualStyleBackColor = true; - this.btnImport.Click += new System.EventHandler(this.btnImport_Click); + this.btnImport.Click += new System.EventHandler(this.BtnImport_Click); // // txtDomain // @@ -39,7 +36,7 @@ namespace mRemoteNG.UI.Window this.txtDomain.Name = "txtDomain"; this.txtDomain.Size = new System.Drawing.Size(406, 22); this.txtDomain.TabIndex = 1; - this.txtDomain.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtDomain_KeyDown); + this.txtDomain.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtDomain_KeyDown); // // lblDomain // @@ -60,23 +57,22 @@ namespace mRemoteNG.UI.Window this.btnChangeDomain.TabIndex = 2; this.btnChangeDomain.Text = "Change"; this.btnChangeDomain.UseVisualStyleBackColor = true; - this.btnChangeDomain.Click += new System.EventHandler(this.btnChangeDomain_Click); + this.btnChangeDomain.Click += new System.EventHandler(this.BtnChangeDomain_Click); // // ActiveDirectoryTree // - this.ActiveDirectoryTree.AdPath = null; - this.ActiveDirectoryTree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.activeDirectoryTree.AdPath = null; + this.activeDirectoryTree.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.ActiveDirectoryTree.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.ActiveDirectoryTree.Domain = ""; - this.ActiveDirectoryTree.Location = new System.Drawing.Point(12, 52); - this.ActiveDirectoryTree.Margin = new System.Windows.Forms.Padding(4); - this.ActiveDirectoryTree.Name = "ActiveDirectoryTree"; - this.ActiveDirectoryTree.SelectedNode = null; - this.ActiveDirectoryTree.Size = new System.Drawing.Size(510, 285); - this.ActiveDirectoryTree.TabIndex = 3; - this.ActiveDirectoryTree.AdPathChanged += new ADTree.ADtree.AdPathChangedEventHandler(this.ActiveDirectoryTree_ADPathChanged); + this.activeDirectoryTree.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.activeDirectoryTree.Location = new System.Drawing.Point(12, 52); + this.activeDirectoryTree.Margin = new System.Windows.Forms.Padding(4); + this.activeDirectoryTree.Name = "ActiveDirectoryTree"; + this.activeDirectoryTree.SelectedNode = null; + this.activeDirectoryTree.Size = new System.Drawing.Size(510, 285); + this.activeDirectoryTree.TabIndex = 3; + this.activeDirectoryTree.AdPathChanged += new mRemoteNG.UI.Controls.AdTree.AdPathChangedEventHandler(this.ActiveDirectoryTree_ADPathChanged); // // btnClose // @@ -88,7 +84,7 @@ namespace mRemoteNG.UI.Window this.btnClose.TabIndex = 5; this.btnClose.Text = "Close"; this.btnClose.UseVisualStyleBackColor = true; - this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + this.btnClose.Click += new System.EventHandler(this.BtnClose_Click); // // chkSubOU // @@ -112,7 +108,7 @@ namespace mRemoteNG.UI.Window this.ClientSize = new System.Drawing.Size(534, 381); this.Controls.Add(this.chkSubOU); this.Controls.Add(this.btnClose); - this.Controls.Add(this.ActiveDirectoryTree); + this.Controls.Add(this.activeDirectoryTree); this.Controls.Add(this.lblDomain); this.Controls.Add(this.txtDomain); this.Controls.Add(this.btnChangeDomain); @@ -122,7 +118,6 @@ namespace mRemoteNG.UI.Window this.Name = "ActiveDirectoryImportWindow"; this.TabText = "Active Directory Import"; this.Text = "Active Directory Import"; - this.Load += new System.EventHandler(this.ADImport_Load); this.ResumeLayout(false); this.PerformLayout(); @@ -131,7 +126,7 @@ namespace mRemoteNG.UI.Window private Controls.Base.NGTextBox txtDomain; private Controls.Base.NGLabel lblDomain; private Controls.Base.NGButton btnChangeDomain; - private ADTree.ADtree ActiveDirectoryTree; + private mRemoteNG.UI.Controls.AdTree activeDirectoryTree; #endregion private Controls.Base.NGButton btnClose; diff --git a/mRemoteV1/UI/Window/ActiveDirectoryImportWindow.cs b/mRemoteV1/UI/Window/ActiveDirectoryImportWindow.cs index af220114a..c59bf857d 100644 --- a/mRemoteV1/UI/Window/ActiveDirectoryImportWindow.cs +++ b/mRemoteV1/UI/Window/ActiveDirectoryImportWindow.cs @@ -8,47 +8,37 @@ using mRemoteNG.Themes; namespace mRemoteNG.UI.Window { - public partial class ActiveDirectoryImportWindow + public partial class ActiveDirectoryImportWindow : BaseWindow { private string _currentDomain; public ActiveDirectoryImportWindow() { - InitializeComponent(); - FontOverrider.FontOverride(this); WindowType = WindowType.ActiveDirectoryImport; DockPnl = new DockContent(); - _currentDomain = Environment.UserDomainName; + InitializeComponent(); + FontOverrider.FontOverride(this); ApplyTheme(); - } - - private new void ApplyTheme() - { - base.ApplyTheme(); - if (ActiveDirectoryTree.Controls.Count < 1) return; - if (!(ActiveDirectoryTree.Controls[0] is TreeView tv)) return; - var tm = ThemeManager.getInstance(); - if (!tm.ActiveAndExtended) return; - tv.BackColor = tm.ActiveTheme.ExtendedPalette.getColor("List_Background"); - tv.ForeColor = tm.ActiveTheme.ExtendedPalette.getColor("List_Item_Foreground"); + ApplyLanguage(); + txtDomain.Text = _currentDomain; + EnableDisableImportButton(); + // Domain doesn't refresh on load, so it defaults to DOMAIN without this... + _currentDomain = Environment.UserDomainName; + ChangeDomain(); } #region Private Methods - #region Event Handlers - - private void ADImport_Load(object sender, EventArgs e) + private new void ApplyTheme() { - ApplyLanguage(); - txtDomain.Text = _currentDomain; - ActiveDirectoryTree.Domain = _currentDomain; - EnableDisableImportButton(); - - // Domain doesn't refresh on load, so it defaults to DOMAIN without this... - ChangeDomain(); + if (!ThemeManager.getInstance().ThemingActive) return; + base.ApplyTheme(); + if (!ThemeManager.getInstance().ActiveAndExtended) return; + activeDirectoryTree.BackColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("List_Background"); + activeDirectoryTree.ForeColor = ThemeManager.getInstance().ActiveTheme.ExtendedPalette.getColor("List_Item_Foreground"); } - private void btnImport_Click(object sender, EventArgs e) + private void BtnImport_Click(object sender, EventArgs e) { var selectedNode = Windows.TreeForm.SelectedNode; ContainerInfo importDestination; @@ -57,37 +47,26 @@ namespace mRemoteNG.UI.Window else importDestination = Runtime.ConnectionsService.ConnectionTreeModel.RootNodes.First(); - Import.ImportFromActiveDirectory(ActiveDirectoryTree.AdPath, importDestination, chkSubOU.Checked); + Import.ImportFromActiveDirectory(activeDirectoryTree.AdPath, importDestination, chkSubOU.Checked); } - /* - private static void txtDomain_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) - { - if (e.KeyCode == Keys.Enter) - e.IsInputKey = true; - } - */ - - private void txtDomain_KeyDown(object sender, KeyEventArgs e) + private void TxtDomain_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode != Keys.Enter) return; ChangeDomain(); e.SuppressKeyPress = true; } - private void btnChangeDomain_Click(object sender, EventArgs e) + private void BtnChangeDomain_Click(object sender, EventArgs e) { ChangeDomain(); } - // ReSharper disable once UnusedParameter.Local private void ActiveDirectoryTree_ADPathChanged(object sender) { EnableDisableImportButton(); } - #endregion - private void ApplyLanguage() { btnImport.Text = Language.strButtonImport; @@ -100,20 +79,19 @@ namespace mRemoteNG.UI.Window private void ChangeDomain() { _currentDomain = txtDomain.Text; - ActiveDirectoryTree.Domain = _currentDomain; - ActiveDirectoryTree.Refresh(); + activeDirectoryTree.Domain = _currentDomain; + activeDirectoryTree.Refresh(); } private void EnableDisableImportButton() { - btnImport.Enabled = !string.IsNullOrEmpty(ActiveDirectoryTree.AdPath); + btnImport.Enabled = !string.IsNullOrEmpty(activeDirectoryTree.AdPath); } - - #endregion - - private void btnClose_Click(object sender, EventArgs e) + private void BtnClose_Click(object sender, EventArgs e) { Close(); } + + #endregion Private Methods } } \ No newline at end of file diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index 8464afcdb..245540f24 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -48,9 +48,6 @@ true - - References\ADTree.dll - ..\packages\BouncyCastle.1.8.6.1\lib\BouncyCastle.Crypto.dll @@ -347,6 +344,7 @@ Component + @@ -439,6 +437,12 @@ + + UserControl + + + AdTree.cs + Component @@ -902,6 +906,9 @@ ColorMapTheme.Designer.cs mRemoteNG + + AdTree.cs + NGButton.cs