Files
mRemoteNG/mRemoteV1/UI/UI.Window.Tree.vb
2013-11-17 21:23:00 -06:00

876 lines
46 KiB
VB.net

Imports mRemoteNG.App
Imports mRemoteNG.My
Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime
Namespace UI
Namespace Window
Public Class Tree
Inherits Base
#Region "Form Stuff"
Private Sub Tree_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
ApplyLanguage()
AddHandler Themes.ThemeManager.ThemeChanged, AddressOf ApplyTheme
ApplyTheme()
txtSearch.Multiline = True
txtSearch.MinimumSize = New Size(0, 14)
txtSearch.Size = New Size(txtSearch.Size.Width, 14)
txtSearch.Multiline = False
End Sub
Private Sub ApplyLanguage()
cMenTreeAddConnection.Text = Language.strAddConnection
cMenTreeAddFolder.Text = Language.strAddFolder
cMenTreeConnect.Text = Language.strConnect
cMenTreeConnectWithOptions.Text = Language.strConnectWithOptions
cMenTreeConnectWithOptionsConnectToConsoleSession.Text = Language.strConnectToConsoleSession
cMenTreeConnectWithOptionsNoCredentials.Text = Language.strConnectNoCredentials
cMenTreeConnectWithOptionsConnectInFullscreen.Text = Language.strConnectInFullscreen
cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Text = Language.strChoosePanelBeforeConnecting
cMenTreeDisconnect.Text = Language.strMenuDisconnect
cMenTreeToolsTransferFile.Text = Language.strMenuTransferFile
cMenTreeToolsImportExport.Text = Language.strImportExport
cMenTreeToolsImportExportExportmRemoteXML.Text = Language.strExportmRemoteXML
cMenTreeToolsImportExportImportmRemoteXML.Text = Language.strImportmRemoteXML
cMenTreeToolsImportExportImportFromAD.Text = Language.strImportAD
cMenTreeToolsImportExportImportFromRDPFiles.Text = Language.strImportRDPFiles
cMenTreeToolsImportExportImportFromPortScan.Text = Language.strImportPortScan
cMenTreeToolsSort.Text = Language.strSort
cMenTreeToolsSortAscending.Text = Language.strSortAsc
cMenTreeToolsSortDescending.Text = Language.strSortDesc
cMenTreeToolsExternalApps.Text = Language.strMenuExternalTools
cMenTreeDuplicate.Text = Language.strDuplicate
cMenTreeRename.Text = Language.strRename
cMenTreeDelete.Text = Language.strMenuDelete
cMenTreeMoveUp.Text = Language.strMoveUp
cMenTreeMoveDown.Text = Language.strMoveDown
mMenAddConnection.ToolTipText = Language.strAddConnection
mMenAddFolder.ToolTipText = Language.strAddFolder
mMenView.ToolTipText = Language.strMenuView.Replace("&", "")
mMenViewExpandAllFolders.Text = Language.strExpandAllFolders
mMenViewCollapseAllFolders.Text = Language.strCollapseAllFolders
mMenSortAscending.ToolTipText = Language.strSortAsc
txtSearch.Text = Language.strSearchPrompt
TabText = Language.strConnections
Text = Language.strConnections
End Sub
Public Sub ApplyTheme()
With Themes.ThemeManager.ActiveTheme
msMain.BackColor = .ToolbarBackgroundColor
msMain.ForeColor = .ToolbarTextColor
tvConnections.BackColor = .ConnectionsPanelBackgroundColor
tvConnections.ForeColor = .ConnectionsPanelTextColor
tvConnections.LineColor = .ConnectionsPanelTreeLineColor
BackColor = .ToolbarBackgroundColor
txtSearch.BackColor = .SearchBoxBackgroundColor
txtSearch.ForeColor = .SearchBoxTextPromptColor
End With
End Sub
#End Region
#Region "Public Methods"
Public Sub New(ByVal panel As DockContent)
WindowType = Type.Tree
DockPnl = panel
InitializeComponent()
FillImageList()
DescriptionTooltip = New ToolTip
DescriptionTooltip.InitialDelay = 300
DescriptionTooltip.ReshowDelay = 0
End Sub
Public Sub InitialRefresh()
tvConnections_AfterSelect(tvConnections, New TreeViewEventArgs(tvConnections.SelectedNode, TreeViewAction.ByMouse))
End Sub
#End Region
#Region "Public Properties"
Public Property DescriptionTooltip() As ToolTip
#End Region
#Region "Private Methods"
Private Sub FillImageList()
Try
imgListTree.Images.Add(Resources.Root)
imgListTree.Images.Add(Resources.Folder)
imgListTree.Images.Add(Resources.Play)
imgListTree.Images.Add(Resources.Pause)
imgListTree.Images.Add(Resources.PuttySessions)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "FillImageList (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub tvConnections_BeforeLabelEdit(ByVal sender As Object, ByVal e As NodeLabelEditEventArgs) Handles tvConnections.BeforeLabelEdit
cMenTreeDelete.ShortcutKeys = Keys.None
End Sub
Private Sub tvConnections_AfterLabelEdit(ByVal sender As Object, ByVal e As NodeLabelEditEventArgs) Handles tvConnections.AfterLabelEdit
Try
cMenTreeDelete.ShortcutKeys = Keys.Delete
mRemoteNG.Tree.Node.FinishRenameSelectedNode(e.Label)
Windows.configForm.pGrid_SelectedObjectChanged()
ShowHideTreeContextMenuItems(e.Node)
SaveConnectionsBG()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "tvConnections_AfterLabelEdit (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub tvConnections_AfterSelect(ByVal sender As Object, ByVal e As TreeViewEventArgs) Handles tvConnections.AfterSelect
Try
Select Case mRemoteNG.Tree.Node.GetNodeType(e.Node)
Case mRemoteNG.Tree.Node.Type.Connection, mRemoteNG.Tree.Node.Type.PuttySession
Windows.configForm.SetPropertyGridObject(e.Node.Tag)
Case mRemoteNG.Tree.Node.Type.Container
Windows.configForm.SetPropertyGridObject(TryCast(e.Node.Tag, Container.Info).ConnectionInfo)
Case mRemoteNG.Tree.Node.Type.Root, mRemoteNG.Tree.Node.Type.PuttyRoot
Windows.configForm.SetPropertyGridObject(e.Node.Tag)
Case Else
Exit Sub
End Select
Windows.configForm.pGrid_SelectedObjectChanged()
ShowHideTreeContextMenuItems(e.Node)
Windows.sessionsForm.GetSessions(True)
LastSelected = mRemoteNG.Tree.Node.GetConstantID(e.Node)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "tvConnections_AfterSelect (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub tvConnections_NodeMouseClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles tvConnections.NodeMouseClick
Try
ShowHideTreeContextMenuItems(tvConnections.SelectedNode)
tvConnections.SelectedNode = e.Node
If e.Button = MouseButtons.Left Then
If Settings.SingleClickOnConnectionOpensIt And _
(mRemoteNG.Tree.Node.GetNodeType(e.Node) = mRemoteNG.Tree.Node.Type.Connection Or _
mRemoteNG.Tree.Node.GetNodeType(e.Node) = mRemoteNG.Tree.Node.Type.PuttySession) Then
OpenConnection()
End If
If Settings.SingleClickSwitchesToOpenConnection And mRemoteNG.Tree.Node.GetNodeType(e.Node) = mRemoteNG.Tree.Node.Type.Connection Then
SwitchToOpenConnection(e.Node.Tag)
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "tvConnections_NodeMouseClick (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Shared Sub tvConnections_NodeMouseDoubleClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles tvConnections.NodeMouseDoubleClick
If mRemoteNG.Tree.Node.GetNodeType(mRemoteNG.Tree.Node.SelectedNode) = mRemoteNG.Tree.Node.Type.Connection Or _
mRemoteNG.Tree.Node.GetNodeType(mRemoteNG.Tree.Node.SelectedNode) = mRemoteNG.Tree.Node.Type.PuttySession Then
OpenConnection()
End If
End Sub
Private Sub tvConnections_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles tvConnections.MouseMove
Try
mRemoteNG.Tree.Node.SetNodeToolTip(e, DescriptionTooltip)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "tvConnections_MouseMove (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Shared Sub EnableMenuItemsRecursive(ByVal items As ToolStripItemCollection, Optional ByVal enable As Boolean = True)
Dim menuItem As ToolStripMenuItem
For Each item As ToolStripItem In items
menuItem = TryCast(item, ToolStripMenuItem)
If menuItem Is Nothing Then Continue For
menuItem.Enabled = enable
If menuItem.HasDropDownItems Then
EnableMenuItemsRecursive(menuItem.DropDownItems, enable)
End If
Next
End Sub
Private Sub ShowHideTreeContextMenuItems(ByVal selectedNode As TreeNode)
If selectedNode Is Nothing Then Return
Try
cMenTree.Enabled = True
EnableMenuItemsRecursive(cMenTree.Items)
Select Case mRemoteNG.Tree.Node.GetNodeType(selectedNode)
Case mRemoteNG.Tree.Node.Type.Connection
Dim connectionInfo As mRemoteNG.Connection.Info = selectedNode.Tag
If connectionInfo.OpenConnections.Count = 0 Then
cMenTreeDisconnect.Enabled = False
End If
If Not (connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH1 Or _
connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH2) Then
cMenTreeToolsTransferFile.Enabled = False
End If
If Not (connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Or _
connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA) Then
cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = False
cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
End If
If (connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.IntApp) Then
cMenTreeConnectWithOptionsNoCredentials.Enabled = False
End If
cMenTreeToolsImportExport.Enabled = False
Case mRemoteNG.Tree.Node.Type.PuttySession
Dim puttySessionInfo As mRemoteNG.Connection.PuttySession.Info = selectedNode.Tag
cMenTreeAddConnection.Enabled = False
cMenTreeAddFolder.Enabled = False
If puttySessionInfo.OpenConnections.Count = 0 Then
cMenTreeDisconnect.Enabled = False
End If
If Not (puttySessionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH1 Or _
puttySessionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH2) Then
cMenTreeToolsTransferFile.Enabled = False
End If
cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = False
cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
cMenTreeToolsImportExport.Enabled = False
cMenTreeToolsSort.Enabled = False
cMenTreeDuplicate.Enabled = False
cMenTreeRename.Enabled = False
cMenTreeDelete.Enabled = False
cMenTreeMoveUp.Enabled = False
cMenTreeMoveDown.Enabled = False
Case mRemoteNG.Tree.Node.Type.Container
cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = False
cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
cMenTreeDisconnect.Enabled = False
Dim openConnections As Integer = 0
Dim connectionInfo As mRemoteNG.Connection.Info
For Each node As TreeNode In selectedNode.Nodes
If TypeOf node.Tag Is mRemoteNG.Connection.Info Then
connectionInfo = node.Tag
openConnections = openConnections + connectionInfo.OpenConnections.Count
End If
Next
If openConnections = 0 Then
cMenTreeDisconnect.Enabled = False
End If
cMenTreeToolsTransferFile.Enabled = False
cMenTreeToolsExternalApps.Enabled = False
Case mRemoteNG.Tree.Node.Type.Root
cMenTreeConnect.Enabled = False
cMenTreeConnectWithOptions.Enabled = False
cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = False
cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Enabled = False
cMenTreeDisconnect.Enabled = False
cMenTreeToolsTransferFile.Enabled = False
cMenTreeToolsExternalApps.Enabled = False
cMenTreeDuplicate.Enabled = False
cMenTreeDelete.Enabled = False
cMenTreeMoveUp.Enabled = False
cMenTreeMoveDown.Enabled = False
Case mRemoteNG.Tree.Node.Type.PuttyRoot
cMenTreeAddConnection.Enabled = False
cMenTreeAddFolder.Enabled = False
cMenTreeConnect.Enabled = False
cMenTreeConnectWithOptions.Enabled = False
cMenTreeDisconnect.Enabled = False
cMenTreeToolsTransferFile.Enabled = False
cMenTreeConnectWithOptions.Enabled = False
cMenTreeToolsImportExport.Enabled = False
cMenTreeToolsSort.Enabled = False
cMenTreeToolsExternalApps.Enabled = False
cMenTreeDuplicate.Enabled = False
cMenTreeRename.Enabled = True
cMenTreeDelete.Enabled = False
cMenTreeMoveUp.Enabled = False
cMenTreeMoveDown.Enabled = False
Case Else
cMenTree.Enabled = False
End Select
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ShowHideTreeContextMenuItems (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region
#Region "Drag and Drop"
Private Shared Sub tvConnections_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles tvConnections.DragDrop
Try
'Check that there is a TreeNode being dragged
If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", True) = False Then Exit Sub
'Get the TreeView raising the event (in case multiple on form)
Dim selectedTreeview As TreeView = CType(sender, TreeView)
'Get the TreeNode being dragged
Dim dropNode As TreeNode = CType(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode)
'The target node should be selected from the DragOver event
Dim targetNode As TreeNode = selectedTreeview.SelectedNode
If dropNode Is targetNode Then
Exit Sub
End If
If mRemoteNG.Tree.Node.GetNodeType(dropNode) = mRemoteNG.Tree.Node.Type.Root Then
Exit Sub
End If
If dropNode Is targetNode.Parent Then
Exit Sub
End If
'Remove the drop node from its current location
dropNode.Remove()
'If there is no targetNode add dropNode to the bottom of
'the TreeView root nodes, otherwise add it to the end of
'the dropNode child nodes
If mRemoteNG.Tree.Node.GetNodeType(targetNode) = mRemoteNG.Tree.Node.Type.Root Or mRemoteNG.Tree.Node.GetNodeType(targetNode) = mRemoteNG.Tree.Node.Type.Container Then
targetNode.Nodes.Insert(0, dropNode)
Else
targetNode.Parent.Nodes.Insert(targetNode.Index + 1, dropNode)
End If
If mRemoteNG.Tree.Node.GetNodeType(dropNode) = mRemoteNG.Tree.Node.Type.Connection Or mRemoteNG.Tree.Node.GetNodeType(dropNode) = mRemoteNG.Tree.Node.Type.Container Then
If mRemoteNG.Tree.Node.GetNodeType(dropNode.Parent) = mRemoteNG.Tree.Node.Type.Container Then
dropNode.Tag.Parent = dropNode.Parent.Tag
ElseIf mRemoteNG.Tree.Node.GetNodeType(dropNode.Parent) = mRemoteNG.Tree.Node.Type.Root Then
dropNode.Tag.Parent = Nothing
If mRemoteNG.Tree.Node.GetNodeType(dropNode) = mRemoteNG.Tree.Node.Type.Connection Then
dropNode.Tag.Inherit.TurnOffInheritanceCompletely()
ElseIf mRemoteNG.Tree.Node.GetNodeType(dropNode) = mRemoteNG.Tree.Node.Type.Container Then
dropNode.Tag.ConnectionInfo.Inherit.TurnOffInheritanceCompletely()
End If
End If
End If
'Ensure the newly created node is visible to
'the user and select it
dropNode.EnsureVisible()
selectedTreeview.SelectedNode = dropNode
SaveConnectionsBG()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "tvConnections_DragDrop (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Shared Sub tvConnections_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles tvConnections.DragEnter
Try
'See if there is a TreeNode being dragged
If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", True) Then
'TreeNode found allow move effect
e.Effect = DragDropEffects.Move
Else
'No TreeNode found, prevent move
e.Effect = DragDropEffects.None
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "tvConnections_DragEnter (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Shared Sub tvConnections_DragOver(ByVal sender As Object, ByVal e As DragEventArgs) Handles tvConnections.DragOver
Try
'Check that there is a TreeNode being dragged
If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", True) = False Then Exit Sub
'Get the TreeView raising the event (in case multiple on form)
Dim selectedTreeview As TreeView = CType(sender, TreeView)
'As the mouse moves over nodes, provide feedback to
'the user by highlighting the node that is the
'current drop target
Dim pt As Point = CType(sender, TreeView).PointToClient(New Point(e.X, e.Y))
Dim targetNode As TreeNode = selectedTreeview.GetNodeAt(pt)
'Select the node currently under the cursor
selectedTreeview.SelectedNode = targetNode
'Check that the selected node is not the dropNode and
'also that it is not a child of the dropNode and
'therefore an invalid target
Dim dropNode As TreeNode = CType(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode)
Dim puttyRootInfo As Root.PuttySessions.Info
Do Until targetNode Is Nothing
puttyRootInfo = TryCast(targetNode.Tag, Root.PuttySessions.Info)
If puttyRootInfo IsNot Nothing Or targetNode Is dropNode Then
e.Effect = DragDropEffects.None
Return
End If
targetNode = targetNode.Parent
Loop
'Currently selected node is a suitable target
e.Effect = DragDropEffects.Move
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "tvConnections_DragOver (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub tvConnections_ItemDrag(ByVal sender As Object, ByVal e As ItemDragEventArgs) Handles tvConnections.ItemDrag
Try
Dim dragTreeNode As TreeNode = TryCast(e.Item, TreeNode)
If dragTreeNode Is Nothing Then Return
If dragTreeNode.Tag Is Nothing Then Return
If TypeOf dragTreeNode.Tag Is mRemoteNG.Connection.PuttySession.Info Or _
Not (TypeOf dragTreeNode.Tag Is mRemoteNG.Connection.Info Or _
TypeOf dragTreeNode.Tag Is Container.Info) Then
tvConnections.SelectedNode = dragTreeNode
Return
End If
'Set the drag node and initiate the DragDrop
DoDragDrop(e.Item, DragDropEffects.Move)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "tvConnections_ItemDrag (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region
#Region "Tree Context Menu"
Private Sub cMenTreeAddConnection_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeAddConnection.Click, mMenAddConnection.Click
AddConnection()
SaveConnectionsBG()
End Sub
Private Sub cMenTreeAddFolder_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeAddFolder.Click, mMenAddFolder.Click
AddFolder()
SaveConnectionsBG()
End Sub
Private Shared Sub cMenTreeConnect_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeConnect.Click
OpenConnection(mRemoteNG.Connection.Info.Force.DoNotJump)
End Sub
Private Shared Sub cMenTreeConnectWithOptionsConnectToConsoleSession_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeConnectWithOptionsConnectToConsoleSession.Click
OpenConnection(mRemoteNG.Connection.Info.Force.UseConsoleSession Or mRemoteNG.Connection.Info.Force.DoNotJump)
End Sub
Private Shared Sub cMenTreeConnectWithOptionsNoCredentials_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeConnectWithOptionsNoCredentials.Click
OpenConnection(mRemoteNG.Connection.Info.Force.NoCredentials)
End Sub
Private Shared Sub cMenTreeConnectWithOptionsDontConnectToConsoleSession_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeConnectWithOptionsDontConnectToConsoleSession.Click
OpenConnection(mRemoteNG.Connection.Info.Force.DontUseConsoleSession Or mRemoteNG.Connection.Info.Force.DoNotJump)
End Sub
Private Shared Sub cMenTreeConnectWithOptionsConnectInFullscreen_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeConnectWithOptionsConnectInFullscreen.Click
OpenConnection(mRemoteNG.Connection.Info.Force.Fullscreen Or mRemoteNG.Connection.Info.Force.DoNotJump)
End Sub
Private Shared Sub cMenTreeConnectWithOptionsChoosePanelBeforeConnecting_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Click
OpenConnection(mRemoteNG.Connection.Info.Force.OverridePanel Or mRemoteNG.Connection.Info.Force.DoNotJump)
End Sub
Private Sub cMenTreeDisconnect_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeDisconnect.Click
DisconnectConnection()
End Sub
Private Shared Sub cMenTreeToolsTransferFile_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeToolsTransferFile.Click
SshTransferFile()
End Sub
Private Sub cMenTreeToolsImportExportExportmRemoteXML_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeToolsImportExportExportmRemoteXML.Click
ExportXml()
End Sub
Private Sub cMenTreeToolsImportExportImportmRemoteXML_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeToolsImportExportImportmRemoteXML.Click
ImportXml()
End Sub
Private Sub cMenTreeToolsImportExportImportFromAD_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeToolsImportExportImportFromAD.Click
ImportFromActiveDirectory()
End Sub
Private Shared Sub cMenTreeToolsImportExportImportFromRDPFiles_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeToolsImportExportImportFromRDPFiles.Click
ImportFromRdpFiles()
End Sub
Private Sub cMenTreeToolsImportExportImportFromRDGFiles_Click(sender As System.Object, e As EventArgs) Handles cMenTreeToolsImportExportImportFromRDGFiles.Click
Try
Using openFileDialog As New OpenFileDialog()
With openFileDialog
.CheckFileExists = True
.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
.Filter = String.Join("|", {Language.strFilterRdgFiles, "*.rdg", Language.strFilterAll, "*.*"})
.Multiselect = True
End With
If Not openFileDialog.ShowDialog = DialogResult.OK Then Return
Dim rootNode As TreeNode = tvConnections.Nodes(0)
Dim rootInfo As Root.Info = CType(rootNode.Tag, Root.Info)
For Each fileName As String In openFileDialog.FileNames
mRemoteNG.Config.Import.RemoteDesktopConnectionManager.Import(fileName, rootInfo)
Next
End Using
Catch ex As Exception
MessageCollector.AddExceptionMessage("UI.Window.Tree.cMenTreeToolsImportExportImportFromRDGFiles_Click failed.", ex, , True)
End Try
End Sub
Private Sub cMenTreeToolsImportExportImportFromPortScan_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeToolsImportExportImportFromPortScan.Click
ImportFromPortScan()
End Sub
Private Sub mMenSortAscending_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles mMenSortAscending.Click
tvConnections.BeginUpdate()
mRemoteNG.Tree.Node.Sort(tvConnections.Nodes.Item(0), SortOrder.Ascending)
tvConnections.EndUpdate()
SaveConnectionsBG()
End Sub
Private Sub cMenTreeToolsSortAscending_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeToolsSortAscending.Click
tvConnections.BeginUpdate()
mRemoteNG.Tree.Node.Sort(tvConnections.SelectedNode, SortOrder.Ascending)
tvConnections.EndUpdate()
SaveConnectionsBG()
End Sub
Private Sub cMenTreeToolsSortDescending_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeToolsSortDescending.Click
tvConnections.BeginUpdate()
mRemoteNG.Tree.Node.Sort(tvConnections.SelectedNode, SortOrder.Descending)
tvConnections.EndUpdate()
SaveConnectionsBG()
End Sub
Private Sub cMenTree_DropDownOpening(ByVal sender As Object, ByVal e As EventArgs) Handles cMenTree.Opening
AddExternalApps()
End Sub
Private Shared Sub cMenTreeToolsExternalAppsEntry_Click(ByVal sender As Object, ByVal e As EventArgs)
StartExternalApp(sender.Tag)
End Sub
Private Sub cMenTreeDuplicate_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeDuplicate.Click
mRemoteNG.Tree.Node.CloneNode(tvConnections.SelectedNode)
SaveConnectionsBG()
End Sub
Private Shared Sub cMenTreeRename_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeRename.Click
mRemoteNG.Tree.Node.StartRenameSelectedNode()
SaveConnectionsBG()
End Sub
Private Shared Sub cMenTreeDelete_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeDelete.Click
mRemoteNG.Tree.Node.DeleteSelectedNode()
SaveConnectionsBG()
End Sub
Private Shared Sub cMenTreeMoveUp_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeMoveUp.Click
mRemoteNG.Tree.Node.MoveNodeUp()
SaveConnectionsBG()
End Sub
Private Shared Sub cMenTreeMoveDown_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeMoveDown.Click
mRemoteNG.Tree.Node.MoveNodeDown()
SaveConnectionsBG()
End Sub
#End Region
#Region "Context Menu Actions"
Public Sub AddConnection()
Try
If tvConnections.SelectedNode Is Nothing Then tvConnections.SelectedNode = tvConnections.Nodes.Item(0)
Dim newTreeNode As TreeNode = mRemoteNG.Tree.Node.AddNode(mRemoteNG.Tree.Node.Type.Connection)
If newTreeNode Is Nothing Then
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.Tree.AddConnection() failed." & vbNewLine & "mRemoteNG.Tree.Node.AddNode() returned Nothing.", True)
Return
End If
Dim containerNode As TreeNode = tvConnections.SelectedNode
If mRemoteNG.Tree.Node.GetNodeType(containerNode) = mRemoteNG.Tree.Node.Type.Connection Then
containerNode = containerNode.Parent
End If
Dim newConnectionInfo As New mRemoteNG.Connection.Info()
If mRemoteNG.Tree.Node.GetNodeType(containerNode) = mRemoteNG.Tree.Node.Type.Root Then
newConnectionInfo.Inherit.TurnOffInheritanceCompletely()
Else
newConnectionInfo.Parent = containerNode.Tag
End If
newConnectionInfo.TreeNode = newTreeNode
newTreeNode.Tag = newConnectionInfo
ConnectionList.Add(newConnectionInfo)
containerNode.Nodes.Add(newTreeNode)
tvConnections.SelectedNode = newTreeNode
tvConnections.SelectedNode.BeginEdit()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.Tree.AddConnection() failed." & vbNewLine & ex.Message, True)
End Try
End Sub
Public Sub AddFolder()
Try
Dim newNode As TreeNode = mRemoteNG.Tree.Node.AddNode(mRemoteNG.Tree.Node.Type.Container)
Dim newContainerInfo As New Container.Info()
newNode.Tag = newContainerInfo
newContainerInfo.TreeNode = newNode
Dim selectedNode As TreeNode = mRemoteNG.Tree.Node.SelectedNode
Dim parentNode As TreeNode
If selectedNode Is Nothing Then
parentNode = tvConnections.Nodes(0)
Else
If mRemoteNG.Tree.Node.GetNodeType(selectedNode) = mRemoteNG.Tree.Node.Type.Connection Then
parentNode = selectedNode.Parent
Else
parentNode = selectedNode
End If
End If
newContainerInfo.ConnectionInfo = New mRemoteNG.Connection.Info(newContainerInfo)
newContainerInfo.ConnectionInfo.Name = newNode.Text
' We can only inherit from a container node, not the root node or connection nodes
If mRemoteNG.Tree.Node.GetNodeType(parentNode) = mRemoteNG.Tree.Node.Type.Container Then
newContainerInfo.Parent = parentNode.Tag
Else
newContainerInfo.ConnectionInfo.Inherit.TurnOffInheritanceCompletely()
End If
ContainerList.Add(newContainerInfo)
parentNode.Nodes.Add(newNode)
tvConnections.SelectedNode = newNode
tvConnections.SelectedNode.BeginEdit()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, String.Format(Language.strErrorAddFolderFailed, ex.Message), True)
End Try
End Sub
Private Sub DisconnectConnection()
Try
If tvConnections.SelectedNode IsNot Nothing Then
If TypeOf tvConnections.SelectedNode.Tag Is mRemoteNG.Connection.Info Then
Dim conI As mRemoteNG.Connection.Info = tvConnections.SelectedNode.Tag
For i As Integer = 0 To conI.OpenConnections.Count - 1
conI.OpenConnections(i).Disconnect()
Next
End If
If TypeOf tvConnections.SelectedNode.Tag Is Container.Info Then
For Each n As TreeNode In tvConnections.SelectedNode.Nodes
If TypeOf n.Tag Is mRemoteNG.Connection.Info Then
Dim conI As mRemoteNG.Connection.Info = n.Tag
For i As Integer = 0 To conI.OpenConnections.Count - 1
conI.OpenConnections(i).Disconnect()
Next
End If
Next
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "DisconnectConnection (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Shared Sub SshTransferFile()
Try
Windows.Show(Type.SSHTransfer)
Dim conI As mRemoteNG.Connection.Info = mRemoteNG.Tree.Node.SelectedNode.Tag
Windows.sshtransferForm.Hostname = conI.Hostname
Windows.sshtransferForm.Username = conI.Username
Windows.sshtransferForm.Password = conI.Password
Windows.sshtransferForm.Port = conI.Port
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "SSHTransferFile (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub ExportXml()
Try
If tvConnections.SelectedNode IsNot Nothing Then
Windows.exportForm = New Export(Windows.exportPanel, tvConnections.SelectedNode)
Windows.exportPanel = Windows.exportForm
Windows.exportForm.Show(frmMain.pnlDock)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ExportXml (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub ImportXml()
Try
If tvConnections.SelectedNode IsNot Nothing Then
ImportConnections()
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ImportXML (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub ImportFromActiveDirectory()
Try
If tvConnections.SelectedNode IsNot Nothing Then
Windows.Show(Type.ADImport)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ImportFromAD (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Shared Sub ImportFromRdpFiles()
Try
ImportConnectionsRdpFile()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ImportFromRDPFiles (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub ImportFromPortScan()
Try
If tvConnections.SelectedNode IsNot Nothing Then
Windows.Show(Type.PortScan, Tools.PortScan.PortScanMode.Import)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ImportFromPortScan (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub AddExternalApps()
Try
'clean up
cMenTreeToolsExternalApps.DropDownItems.Clear()
'add ext apps
For Each extA As Tools.ExternalTool In Runtime.ExternalTools
Dim nItem As New ToolStripMenuItem
nItem.Text = extA.DisplayName
nItem.Tag = extA
nItem.Image = extA.Image
AddHandler nItem.Click, AddressOf cMenTreeToolsExternalAppsEntry_Click
cMenTreeToolsExternalApps.DropDownItems.Add(nItem)
Next
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "cMenTreeTools_DropDownOpening failed (UI.Window.Tree)" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Shared Sub StartExternalApp(ByVal externalTool As Tools.ExternalTool)
Try
If mRemoteNG.Tree.Node.GetNodeType(mRemoteNG.Tree.Node.SelectedNode) = mRemoteNG.Tree.Node.Type.Connection Or _
mRemoteNG.Tree.Node.GetNodeType(mRemoteNG.Tree.Node.SelectedNode) = mRemoteNG.Tree.Node.Type.PuttySession Then
externalTool.Start(mRemoteNG.Tree.Node.SelectedNode.Tag)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "cMenTreeToolsExternalAppsEntry_Click failed (UI.Window.Tree)" & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region
#Region "Menu"
Private Shared Sub mMenViewExpandAllFolders_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles mMenViewExpandAllFolders.Click
mRemoteNG.Tree.Node.ExpandAllNodes()
End Sub
Private Sub mMenViewCollapseAllFolders_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles mMenViewCollapseAllFolders.Click
If tvConnections.SelectedNode IsNot Nothing Then
If tvConnections.SelectedNode.IsEditing Then tvConnections.SelectedNode.EndEdit(False)
End If
mRemoteNG.Tree.Node.CollapseAllNodes()
End Sub
#End Region
#Region "Search"
Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As EventArgs) Handles txtSearch.GotFocus
txtSearch.ForeColor = Themes.ThemeManager.ActiveTheme.SearchBoxTextColor
If txtSearch.Text = Language.strSearchPrompt Then
txtSearch.Text = ""
End If
End Sub
Private Sub txtSearch_LostFocus(ByVal sender As Object, ByVal e As EventArgs) Handles txtSearch.LostFocus
If txtSearch.Text = "" Then
txtSearch.ForeColor = Themes.ThemeManager.ActiveTheme.SearchBoxTextPromptColor
txtSearch.Text = Language.strSearchPrompt
End If
End Sub
Private Sub txtSearch_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles txtSearch.KeyDown
Try
If e.KeyCode = Keys.Escape Then
e.Handled = True
tvConnections.Focus()
ElseIf e.KeyCode = Keys.Up Then
tvConnections.SelectedNode = tvConnections.SelectedNode.PrevVisibleNode
ElseIf e.KeyCode = Keys.Down Then
tvConnections.SelectedNode = tvConnections.SelectedNode.NextVisibleNode
Else
tvConnections_KeyDown(sender, e)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "txtSearch_KeyDown (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub txtSearch_TextChanged(ByVal sender As System.Object, ByVal e As EventArgs) Handles txtSearch.TextChanged
tvConnections.SelectedNode = mRemoteNG.Tree.Node.Find(tvConnections.Nodes(0), txtSearch.Text)
End Sub
Private Sub tvConnections_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles tvConnections.KeyPress
Try
If Char.IsLetterOrDigit(e.KeyChar) Then
txtSearch.Text = e.KeyChar
txtSearch.Focus()
txtSearch.SelectionStart = txtSearch.TextLength
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "tvConnections_KeyPress (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub tvConnections_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles tvConnections.KeyDown
Try
If e.KeyCode = Keys.Enter Then
If TypeOf tvConnections.SelectedNode.Tag Is mRemoteNG.Connection.Info Then
e.Handled = True
OpenConnection()
Else
If tvConnections.SelectedNode.IsExpanded Then
tvConnections.SelectedNode.Collapse(True)
Else
tvConnections.SelectedNode.Expand()
End If
End If
ElseIf e.KeyCode = Keys.Escape Xor e.KeyCode = Keys.Control Or e.KeyCode = Keys.F Then
txtSearch.Focus()
txtSearch.SelectionStart = txtSearch.TextLength
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "tvConnections_KeyDown (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region
End Class
End Namespace
End Namespace