mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-26 12:08:37 +08:00
876 lines
46 KiB
VB.net
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 |