Files
mRemoteNG/mRemoteV1/UI/UI.Window.Connection.vb

966 lines
50 KiB
VB.net

Imports System
Imports System.Windows
Imports System.Windows.Forms
Imports mRemoteNG.App
Imports Crownwood
Imports WeifenLuo.WinFormsUI.Docking
Imports PSTaskDialog
Imports mRemoteNG.App.Runtime
Namespace UI
Namespace Window
Public Class Connection
Inherits UI.Window.Base
#Region "Form Init"
Friend WithEvents cmenTab As System.Windows.Forms.ContextMenuStrip
Private components As System.ComponentModel.IContainer
Friend WithEvents cmenTabFullscreen As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabScreenshot As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabTransferFile As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabSendSpecialKeys As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabSep1 As System.Windows.Forms.ToolStripSeparator
Friend WithEvents cmenTabRenameTab As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabDuplicateTab As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabDisconnect As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabSmartSize As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabSendSpecialKeysCtrlAltDel As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabSendSpecialKeysCtrlEsc As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabViewOnly As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabReconnect As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabExternalApps As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabStartChat As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cmenTabRefreshScreen As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents ToolStripSeparator1 As System.Windows.Forms.ToolStripSeparator
Friend WithEvents cmenTabPuttySettings As System.Windows.Forms.ToolStripMenuItem
Public WithEvents TabController As Crownwood.Magic.Controls.TabControl
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Connection))
Me.TabController = New Crownwood.Magic.Controls.TabControl
Me.cmenTab = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.cmenTabFullscreen = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabSmartSize = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabViewOnly = New System.Windows.Forms.ToolStripMenuItem
Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator
Me.cmenTabScreenshot = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabStartChat = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabTransferFile = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabRefreshScreen = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabSendSpecialKeys = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabSendSpecialKeysCtrlAltDel = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabSendSpecialKeysCtrlEsc = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabExternalApps = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabSep1 = New System.Windows.Forms.ToolStripSeparator
Me.cmenTabRenameTab = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabDuplicateTab = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabReconnect = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabDisconnect = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTabPuttySettings = New System.Windows.Forms.ToolStripMenuItem
Me.cmenTab.SuspendLayout()
Me.SuspendLayout()
'
'TabController
'
Me.TabController.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.TabController.Appearance = Crownwood.Magic.Controls.TabControl.VisualAppearance.MultiDocument
Me.TabController.Cursor = System.Windows.Forms.Cursors.Hand
Me.TabController.DragFromControl = False
Me.TabController.IDEPixelArea = True
Me.TabController.IDEPixelBorder = False
Me.TabController.Location = New System.Drawing.Point(0, -1)
Me.TabController.Name = "TabController"
Me.TabController.Size = New System.Drawing.Size(632, 454)
Me.TabController.TabIndex = 0
'
'cmenTab
'
Me.cmenTab.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmenTabFullscreen, Me.cmenTabSmartSize, Me.cmenTabViewOnly, Me.ToolStripSeparator1, Me.cmenTabScreenshot, Me.cmenTabStartChat, Me.cmenTabTransferFile, Me.cmenTabRefreshScreen, Me.cmenTabSendSpecialKeys, Me.cmenTabPuttySettings, Me.cmenTabExternalApps, Me.cmenTabSep1, Me.cmenTabRenameTab, Me.cmenTabDuplicateTab, Me.cmenTabReconnect, Me.cmenTabDisconnect})
Me.cmenTab.Name = "cmenTab"
Me.cmenTab.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional
Me.cmenTab.Size = New System.Drawing.Size(202, 346)
'
'cmenTabFullscreen
'
Me.cmenTabFullscreen.Image = Global.mRemoteNG.My.Resources.Resources.Fullscreen
Me.cmenTabFullscreen.Name = "cmenTabFullscreen"
Me.cmenTabFullscreen.Size = New System.Drawing.Size(201, 22)
Me.cmenTabFullscreen.Text = "Fullscreen (RDP)"
'
'cmenTabSmartSize
'
Me.cmenTabSmartSize.Image = Global.mRemoteNG.My.Resources.Resources.SmartSize
Me.cmenTabSmartSize.Name = "cmenTabSmartSize"
Me.cmenTabSmartSize.Size = New System.Drawing.Size(201, 22)
Me.cmenTabSmartSize.Text = "SmartSize (RDP/VNC)"
'
'cmenTabViewOnly
'
Me.cmenTabViewOnly.Name = "cmenTabViewOnly"
Me.cmenTabViewOnly.Size = New System.Drawing.Size(201, 22)
Me.cmenTabViewOnly.Text = "View Only (VNC)"
'
'ToolStripSeparator1
'
Me.ToolStripSeparator1.Name = "ToolStripSeparator1"
Me.ToolStripSeparator1.Size = New System.Drawing.Size(198, 6)
'
'cmenTabScreenshot
'
Me.cmenTabScreenshot.Image = Global.mRemoteNG.My.Resources.Resources.Screenshot_Add
Me.cmenTabScreenshot.Name = "cmenTabScreenshot"
Me.cmenTabScreenshot.Size = New System.Drawing.Size(201, 22)
Me.cmenTabScreenshot.Text = "Screenshot"
'
'cmenTabStartChat
'
Me.cmenTabStartChat.Image = Global.mRemoteNG.My.Resources.Resources.Chat
Me.cmenTabStartChat.Name = "cmenTabStartChat"
Me.cmenTabStartChat.Size = New System.Drawing.Size(201, 22)
Me.cmenTabStartChat.Text = "Start Chat (VNC)"
Me.cmenTabStartChat.Visible = False
'
'cmenTabTransferFile
'
Me.cmenTabTransferFile.Image = Global.mRemoteNG.My.Resources.Resources.SSHTransfer
Me.cmenTabTransferFile.Name = "cmenTabTransferFile"
Me.cmenTabTransferFile.Size = New System.Drawing.Size(201, 22)
Me.cmenTabTransferFile.Text = "Transfer File (SSH)"
'
'cmenTabRefreshScreen
'
Me.cmenTabRefreshScreen.Image = Global.mRemoteNG.My.Resources.Resources.Refresh
Me.cmenTabRefreshScreen.Name = "cmenTabRefreshScreen"
Me.cmenTabRefreshScreen.Size = New System.Drawing.Size(201, 22)
Me.cmenTabRefreshScreen.Text = "Refresh Screen (VNC)"
'
'cmenTabSendSpecialKeys
'
Me.cmenTabSendSpecialKeys.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmenTabSendSpecialKeysCtrlAltDel, Me.cmenTabSendSpecialKeysCtrlEsc})
Me.cmenTabSendSpecialKeys.Image = Global.mRemoteNG.My.Resources.Resources.Keyboard
Me.cmenTabSendSpecialKeys.Name = "cmenTabSendSpecialKeys"
Me.cmenTabSendSpecialKeys.Size = New System.Drawing.Size(201, 22)
Me.cmenTabSendSpecialKeys.Text = "Send special Keys (VNC)"
'
'cmenTabSendSpecialKeysCtrlAltDel
'
Me.cmenTabSendSpecialKeysCtrlAltDel.Name = "cmenTabSendSpecialKeysCtrlAltDel"
Me.cmenTabSendSpecialKeysCtrlAltDel.Size = New System.Drawing.Size(141, 22)
Me.cmenTabSendSpecialKeysCtrlAltDel.Text = "Ctrl+Alt+Del"
'
'cmenTabSendSpecialKeysCtrlEsc
'
Me.cmenTabSendSpecialKeysCtrlEsc.Name = "cmenTabSendSpecialKeysCtrlEsc"
Me.cmenTabSendSpecialKeysCtrlEsc.Size = New System.Drawing.Size(141, 22)
Me.cmenTabSendSpecialKeysCtrlEsc.Text = "Ctrl+Esc"
'
'cmenTabExternalApps
'
Me.cmenTabExternalApps.Image = CType(resources.GetObject("cmenTabExternalApps.Image"), System.Drawing.Image)
Me.cmenTabExternalApps.Name = "cmenTabExternalApps"
Me.cmenTabExternalApps.Size = New System.Drawing.Size(201, 22)
Me.cmenTabExternalApps.Text = "External Applications"
'
'cmenTabSep1
'
Me.cmenTabSep1.Name = "cmenTabSep1"
Me.cmenTabSep1.Size = New System.Drawing.Size(198, 6)
'
'cmenTabRenameTab
'
Me.cmenTabRenameTab.Image = Global.mRemoteNG.My.Resources.Resources.Rename
Me.cmenTabRenameTab.Name = "cmenTabRenameTab"
Me.cmenTabRenameTab.Size = New System.Drawing.Size(201, 22)
Me.cmenTabRenameTab.Text = "Rename Tab"
'
'cmenTabDuplicateTab
'
Me.cmenTabDuplicateTab.Name = "cmenTabDuplicateTab"
Me.cmenTabDuplicateTab.Size = New System.Drawing.Size(201, 22)
Me.cmenTabDuplicateTab.Text = "Duplicate Tab"
'
'cmenTabReconnect
'
Me.cmenTabReconnect.Image = CType(resources.GetObject("cmenTabReconnect.Image"), System.Drawing.Image)
Me.cmenTabReconnect.Name = "cmenTabReconnect"
Me.cmenTabReconnect.Size = New System.Drawing.Size(201, 22)
Me.cmenTabReconnect.Text = "Reconnect"
'
'cmenTabDisconnect
'
Me.cmenTabDisconnect.Image = Global.mRemoteNG.My.Resources.Resources.Pause
Me.cmenTabDisconnect.Name = "cmenTabDisconnect"
Me.cmenTabDisconnect.Size = New System.Drawing.Size(201, 22)
Me.cmenTabDisconnect.Text = "Disconnect"
'
'cmenTabPuttySettings
'
Me.cmenTabPuttySettings.Name = "cmenTabPuttySettings"
Me.cmenTabPuttySettings.Size = New System.Drawing.Size(201, 22)
Me.cmenTabPuttySettings.Text = "PuTTY Settings"
'
'Connection
'
Me.ClientSize = New System.Drawing.Size(632, 453)
Me.Controls.Add(Me.TabController)
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Icon = Global.mRemoteNG.My.Resources.Resources.mRemote_Icon
Me.Name = "Connection"
Me.TabText = "UI.Window.Connection"
Me.Text = "UI.Window.Connection"
Me.cmenTab.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
#End Region
#Region "Public Methods"
Public Sub New(ByVal Panel As DockContent, Optional ByVal FormText As String = "")
If FormText = "" Then
FormText = My.Language.strNewPanel
End If
Me.WindowType = Type.Connection
Me.DockPnl = Panel
Me.InitializeComponent()
Me.Text = FormText
Me.TabText = FormText
End Sub
Public Function AddConnectionTab(ByVal conI As mRemoteNG.Connection.Info) As Magic.Controls.TabPage
Try
Dim nTab As New Magic.Controls.TabPage
nTab.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.Right Or AnchorStyles.Top
If My.Settings.ShowProtocolOnTabs Then
nTab.Title = conI.Protocol.ToString & ": "
Else
nTab.Title = ""
End If
nTab.Title &= conI.Name
If My.Settings.ShowLogonInfoOnTabs Then
nTab.Title &= " ("
If conI.Domain <> "" Then
nTab.Title &= conI.Domain
End If
If conI.Username <> "" Then
If conI.Domain <> "" Then
nTab.Title &= "\"
End If
nTab.Title &= conI.Username
End If
nTab.Title &= ")"
End If
nTab.Title = nTab.Title.Replace("&", "&&")
Dim conIcon As Icon = mRemoteNG.Connection.Icon.FromString(conI.Icon)
If conIcon IsNot Nothing Then
nTab.Icon = conIcon
End If
If My.Settings.OpenTabsRightOfSelected Then
Me.TabController.TabPages.Insert(Me.TabController.SelectedIndex + 1, nTab)
Else
Me.TabController.TabPages.Add(nTab)
End If
nTab.Selected = True
_ignoreChangeSelectedTabClick = False
Return nTab
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AddConnectionTab (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
Return Nothing
End Function
#End Region
#Region "Form"
Private Sub Connection_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ApplyLanguage()
End Sub
Private Sub ApplyLanguage()
cmenTabFullscreen.Text = My.Language.strMenuFullScreenRDP
cmenTabSmartSize.Text = My.Language.strMenuSmartSize
cmenTabViewOnly.Text = My.Language.strMenuViewOnly
cmenTabScreenshot.Text = My.Language.strMenuScreenshot
cmenTabStartChat.Text = My.Language.strMenuStartChat
cmenTabTransferFile.Text = My.Language.strMenuTransferFile
cmenTabRefreshScreen.Text = My.Language.strMenuRefreshScreen
cmenTabSendSpecialKeys.Text = My.Language.strMenuSendSpecialKeys
cmenTabSendSpecialKeysCtrlAltDel.Text = My.Language.strMenuCtrlAltDel
cmenTabSendSpecialKeysCtrlEsc.Text = My.Language.strMenuCtrlEsc
cmenTabExternalApps.Text = My.Language.strMenuExternalTools
cmenTabRenameTab.Text = My.Language.strMenuRenameTab
cmenTabDuplicateTab.Text = My.Language.strMenuDuplicateTab
cmenTabReconnect.Text = My.Language.strMenuReconnect
cmenTabDisconnect.Text = My.Language.strMenuDisconnect
cmenTabPuttySettings.Text = My.Language.strPuttySettings
End Sub
Private Sub Connection_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If Not frmMain.IsClosing And My.Settings.ConfirmCloseConnection And TabController.TabPages.Count > 0 Then
Dim Result As DialogResult = cTaskDialog.MessageBox(Me, My.Application.Info.ProductName, String.Format(My.Language.strConfirmCloseConnectionPanelMainInstruction, Me.Text), "", "", "", My.Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.YesNo, eSysIcons.Question, Nothing)
If cTaskDialog.VerificationChecked Then
My.Settings.ConfirmCloseConnection = False
End If
If Result = DialogResult.No Then
e.Cancel = True
Exit Sub
End If
End If
Try
For Each tabP As Magic.Controls.TabPage In Me.TabController.TabPages
If tabP.Tag IsNot Nothing Then
Dim IC As mRemoteNG.Connection.InterfaceControl = tabP.Tag
IC.Protocol.Close()
End If
Next
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Connection_FormClosing (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub Connection_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
Try
For Each tabP As Magic.Controls.TabPage In Me.TabController.TabPages
If tabP.Tag IsNot Nothing Then
If TypeOf tabP.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = tabP.Tag
IC.Protocol.Resize()
End If
End If
Next
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Connection_Resize (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region
#Region "TabController"
Private Sub TabController_ClosePressed(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabController.ClosePressed
If Me.TabController.SelectedTab Is Nothing Then
Exit Sub
End If
Me.CloseConnectionTab()
End Sub
Private Sub CloseConnectionTab()
Dim SelectedTab As Crownwood.Magic.Controls.TabPage = Me.TabController.SelectedTab
If My.Settings.ConfirmCloseConnection Then
Dim Result As DialogResult = cTaskDialog.MessageBox(Me, My.Application.Info.ProductName, String.Format(My.Language.strConfirmCloseConnectionMainInstruction, SelectedTab.Title), "", "", "", My.Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.YesNo, eSysIcons.Question, Nothing)
If cTaskDialog.VerificationChecked Then
My.Settings.ConfirmCloseConnection = False
End If
If Result = DialogResult.No Then
Exit Sub
End If
End If
Try
If SelectedTab.Tag IsNot Nothing Then
Dim IC As mRemoteNG.Connection.InterfaceControl = SelectedTab.Tag
IC.Protocol.Close()
Else
Me.CloseTab(SelectedTab)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "CloseConnectionTab (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub TabController_DoubleClickTab(ByVal sender As Crownwood.Magic.Controls.TabControl, ByVal page As Crownwood.Magic.Controls.TabPage) Handles TabController.DoubleClickTab
_lastMouseUp = 0
If My.Settings.DoubleClickOnTabClosesIt Then
Me.CloseConnectionTab()
End If
End Sub
#Region "Drag and Drop"
Private Sub TabController_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TabController.DragDrop
If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", True) Then
App.Runtime.OpenConnection(e.Data.GetData("System.Windows.Forms.TreeNode", True).Tag, Me, mRemoteNG.Connection.Info.Force.DoNotJump)
End If
End Sub
Private Sub TabController_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TabController.DragEnter
If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", True) Then
e.Effect = DragDropEffects.Move
End If
End Sub
Private Sub TabController_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TabController.DragOver
e.Effect = DragDropEffects.Move
End Sub
#End Region
#End Region
#Region "Tab Menu"
Private Sub ShowHideMenuButtons()
Try
If Me.TabController.SelectedTab Is Nothing Then
Exit Sub
End If
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
If IC Is Nothing Then
Exit Sub
End If
If IC.Info.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Then
Me.cmenTabFullscreen.Enabled = True
Me.cmenTabSmartSize.Enabled = True
Dim rdp As mRemoteNG.Connection.Protocol.RDP = IC.Protocol
Me.cmenTabSmartSize.Checked = rdp.SmartSize
Me.cmenTabFullscreen.Checked = rdp.Fullscreen
Else
Me.cmenTabFullscreen.Enabled = False
Me.cmenTabSmartSize.Enabled = False
End If
If IC.Info.Protocol = mRemoteNG.Connection.Protocol.Protocols.VNC Then
Me.cmenTabSendSpecialKeys.Enabled = True
Me.cmenTabViewOnly.Enabled = True
Me.cmenTabSmartSize.Enabled = True
Me.cmenTabStartChat.Enabled = True
Me.cmenTabRefreshScreen.Enabled = True
Me.cmenTabTransferFile.Enabled = False
Dim vnc As mRemoteNG.Connection.Protocol.VNC = IC.Protocol
Me.cmenTabSmartSize.Checked = vnc.SmartSize
Me.cmenTabViewOnly.Checked = vnc.ViewOnly
Else
Me.cmenTabSendSpecialKeys.Enabled = False
Me.cmenTabViewOnly.Enabled = False
Me.cmenTabStartChat.Enabled = False
Me.cmenTabRefreshScreen.Enabled = False
Me.cmenTabTransferFile.Enabled = False
End If
If IC.Info.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH1 Or IC.Info.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH2 Then
Me.cmenTabTransferFile.Enabled = True
End If
If TypeOf IC.Protocol Is mRemoteNG.Connection.Protocol.PuttyBase Then
Me.cmenTabPuttySettings.Enabled = True
Else
Me.cmenTabPuttySettings.Enabled = False
End If
AddExternalApps()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ShowHideMenuButtons (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub cmenTabScreenshot_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabScreenshot.Click
cmenTab.Close()
Application.DoEvents()
Windows.screenshotForm.AddScreenshot(Tools.Misc.TakeScreenshot(Me))
End Sub
Private Sub cmenTabSmartSize_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabSmartSize.Click
Me.ToggleSmartSize()
End Sub
Private Sub cmenTabReconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabReconnect.Click
Me.Reconnect()
End Sub
Private Sub cmenTabTransferFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabTransferFile.Click
Me.TransferFile()
End Sub
Private Sub cmenTabViewOnly_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabViewOnly.Click
Me.ToggleViewOnly()
End Sub
Private Sub cmenTabStartChat_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmenTabStartChat.Click
Me.StartChat()
End Sub
Private Sub cmenTabRefreshScreen_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmenTabRefreshScreen.Click
Me.RefreshScreen()
End Sub
Private Sub cmenTabSendSpecialKeysCtrlAltDel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabSendSpecialKeysCtrlAltDel.Click
Me.SendSpecialKeys(mRemoteNG.Connection.Protocol.VNC.SpecialKeys.CtrlAltDel)
End Sub
Private Sub cmenTabSendSpecialKeysCtrlEsc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabSendSpecialKeysCtrlEsc.Click
Me.SendSpecialKeys(mRemoteNG.Connection.Protocol.VNC.SpecialKeys.CtrlEsc)
End Sub
Private Sub cmenTabFullscreen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabFullscreen.Click
Me.ToggleFullscreen()
End Sub
Private Sub cmenTabPuttySettings_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabPuttySettings.Click
Me.ShowPuttySettingsDialog()
End Sub
Private Sub cmenTabExternalAppsEntry_Click(ByVal sender As Object, ByVal e As System.EventArgs)
StartExternalApp(sender.Tag)
End Sub
Private Sub cmenTabDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabDisconnect.Click
Me.CloseTabMenu()
End Sub
Private Sub cmenTabDuplicateTab_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabDuplicateTab.Click
Me.DuplicateTab()
End Sub
Private Sub cmenTabRenameTab_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmenTabRenameTab.Click
Me.RenameTab()
End Sub
#End Region
#Region "Tab Actions"
Private Sub ToggleSmartSize()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
If TypeOf IC.Protocol Is mRemoteNG.Connection.Protocol.RDP Then
Dim rdp As mRemoteNG.Connection.Protocol.RDP = IC.Protocol
rdp.ToggleSmartSize()
ElseIf TypeOf IC.Protocol Is mRemoteNG.Connection.Protocol.VNC Then
Dim vnc As mRemoteNG.Connection.Protocol.VNC = IC.Protocol
vnc.ToggleSmartSize()
End If
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ToggleSmartSize (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub TransferFile()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
If IC.Info.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH1 Or IC.Info.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH2 Then
SSHTransferFile()
ElseIf IC.Info.Protocol = mRemoteNG.Connection.Protocol.Protocols.VNC Then
VNCTransferFile()
End If
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "TransferFile (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub SSHTransferFile()
Try
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
Windows.Show(Type.SSHTransfer)
Dim conI As mRemoteNG.Connection.Info = IC.Info
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.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub VNCTransferFile()
Try
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
Dim vnc As mRemoteNG.Connection.Protocol.VNC = IC.Protocol
vnc.StartFileTransfer()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "VNCTransferFile (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub ToggleViewOnly()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
If TypeOf IC.Protocol Is mRemoteNG.Connection.Protocol.VNC Then
cmenTabViewOnly.Checked = Not cmenTabViewOnly.Checked
Dim vnc As mRemoteNG.Connection.Protocol.VNC = IC.Protocol
vnc.ToggleViewOnly()
End If
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ToggleViewOnly (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub StartChat()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
If TypeOf IC.Protocol Is mRemoteNG.Connection.Protocol.VNC Then
Dim vnc As mRemoteNG.Connection.Protocol.VNC = IC.Protocol
vnc.StartChat()
End If
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "StartChat (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub RefreshScreen()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
If TypeOf IC.Protocol Is mRemoteNG.Connection.Protocol.VNC Then
Dim vnc As mRemoteNG.Connection.Protocol.VNC = IC.Protocol
vnc.RefreshScreen()
End If
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "RefreshScreen (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub SendSpecialKeys(ByVal Keys As mRemoteNG.Connection.Protocol.VNC.SpecialKeys)
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
If TypeOf IC.Protocol Is mRemoteNG.Connection.Protocol.VNC Then
Dim vnc As mRemoteNG.Connection.Protocol.VNC = IC.Protocol
vnc.SendSpecialKeys(Keys)
End If
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "SendSpecialKeys (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub ToggleFullscreen()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
If TypeOf IC.Protocol Is mRemoteNG.Connection.Protocol.RDP Then
Dim rdp As mRemoteNG.Connection.Protocol.RDP = IC.Protocol
rdp.ToggleFullscreen()
End If
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ToggleFullscreen (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub ShowPuttySettingsDialog()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim objInterfaceControl As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
If TypeOf objInterfaceControl.Protocol Is mRemoteNG.Connection.Protocol.PuttyBase Then
Dim objPuttyBase As mRemoteNG.Connection.Protocol.PuttyBase = objInterfaceControl.Protocol
objPuttyBase.ShowSettingsDialog()
End If
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ShowPuttySettingsDialog (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub AddExternalApps()
Try
'clean up
cmenTabExternalApps.DropDownItems.Clear()
'add ext apps
For Each extA As Tools.ExternalTool In ExternalTools
Dim nItem As New ToolStripMenuItem
nItem.Text = extA.DisplayName
nItem.Tag = extA
nItem.Image = extA.Image
AddHandler nItem.Click, AddressOf cmenTabExternalAppsEntry_Click
cmenTabExternalApps.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 Sub StartExternalApp(ByVal ExtA As Tools.ExternalTool)
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
ExtA.Start(IC.Info)
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "cmenTabExternalAppsEntry_Click failed (UI.Window.Tree)" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub CloseTabMenu()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
IC.Protocol.Close()
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "CloseTabMenu (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub DuplicateTab()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
App.Runtime.OpenConnection(IC.Info, mRemoteNG.Connection.Info.Force.DoNotJump)
_ignoreChangeSelectedTabClick = False
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "DuplicateTab (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub Reconnect()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
Dim conI As mRemoteNG.Connection.Info = IC.Info
IC.Protocol.Close()
App.Runtime.OpenConnection(conI, mRemoteNG.Connection.Info.Force.DoNotJump)
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Reconnect (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub RenameTab()
Try
Dim nTitle As String = InputBox(My.Language.strNewTitle & ":", , Me.TabController.SelectedTab.Title.Replace("&&", "&"))
If nTitle <> "" Then
Me.TabController.SelectedTab.Title = nTitle.Replace("&", "&&")
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "RenameTab (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region
#Region "Protocols"
Public Sub Prot_Event_Closed(ByVal sender As Object)
Dim Prot As mRemoteNG.Connection.Protocol.Base = sender
CloseTab(Prot.InterfaceControl.Parent)
End Sub
#End Region
#Region "Tabs"
Private Delegate Sub CloseTabCB(ByVal TabToBeClosed As Magic.Controls.TabPage)
Private Sub CloseTab(ByVal TabToBeClosed As Magic.Controls.TabPage)
If Me.TabController.InvokeRequired Then
Dim s As New CloseTabCB(AddressOf CloseTab)
Try
Me.TabController.Invoke(s, TabToBeClosed)
Catch comEx As System.Runtime.InteropServices.COMException
Me.TabController.Invoke(s, TabToBeClosed)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't close tab" & vbNewLine & ex.Message, True)
End Try
Else
Try
Me.TabController.TabPages.Remove(TabToBeClosed)
_ignoreChangeSelectedTabClick = False
Catch comEx As System.Runtime.InteropServices.COMException
CloseTab(TabToBeClosed)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't close tab" & vbNewLine & ex.Message, True)
End Try
If Me.TabController.TabPages.Count = 0 Then
Me.Close()
End If
End If
End Sub
Private _ignoreChangeSelectedTabClick As Boolean = False
Private Sub TabController_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabController.SelectionChanged
_ignoreChangeSelectedTabClick = True
FocusIC()
RefreshIC()
End Sub
Private _lastMouseUp As Integer = 0
Private Sub TabController_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.MouseUp
Debug.Print("TabController_MouseUp()")
Debug.Print("_ignoreChangeSelectedTabClick = {0}", _ignoreChangeSelectedTabClick)
Try
If Not Native.GetForegroundWindow() = frmMain.Handle And Not _ignoreChangeSelectedTabClick Then
Dim clickedTab As Magic.Controls.TabPage = TabController.TabPageFromPoint(e.Location)
If clickedTab IsNot Nothing And TabController.SelectedTab IsNot clickedTab Then
Native.SetForegroundWindow(Handle)
TabController.SelectedTab = clickedTab
End If
End If
_ignoreChangeSelectedTabClick = False
Select Case e.Button
Case MouseButtons.Left
Dim currentTicks As Integer = Environment.TickCount
Dim elapsedTicks As Integer = currentTicks - _lastMouseUp
If elapsedTicks > SystemInformation.DoubleClickTime Then
_lastMouseUp = currentTicks
FocusIC()
Else
TabController.OnDoubleClickTab(TabController.SelectedTab)
End If
Case MouseButtons.Middle
CloseConnectionTab()
Case MouseButtons.Right
ShowHideMenuButtons()
Native.SetForegroundWindow(Handle)
cmenTab.Show(TabController, e.Location)
End Select
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "TabController_MouseUp (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub FocusIC()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
IC.Protocol.Focus()
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "FocusIC (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Public Sub RefreshIC()
Try
If Me.TabController.SelectedTab IsNot Nothing Then
If TypeOf Me.TabController.SelectedTab.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
If IC.Info.Protocol = mRemoteNG.Connection.Protocol.Protocols.VNC Then
TryCast(IC.Protocol, mRemoteNG.Connection.Protocol.VNC).RefreshScreen()
End If
End If
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "RefreshIC (UI.Window.Connection) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region
#Region "Window Overrides"
Protected Overloads Overrides Sub WndProc(ByRef WndMsg As Message)
Try
If WndMsg.Msg = Native.WM_MOUSEACTIVATE Then
Dim curTab As Magic.Controls.TabPage = Me.TabController.SelectedTab
Dim curRect As Rectangle = curTab.RectangleToScreen(curTab.ClientRectangle)
If curRect.Contains(Form.MousePosition) Then
If curTab IsNot Nothing Then
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
If IC.Info.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Then
IC.Protocol.Focus()
End If
End If
End If
Return ' Do not pass to base class
End If
Catch ex As Exception
End Try
MyBase.WndProc(WndMsg)
End Sub
#End Region
#Region "Tab drag and drop"
Private Sub TabController_PageDragStart(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.PageDragEnd, TabController.PageDragStart
Cursor = Cursors.SizeWE
End Sub
Private Sub TabController_PageDragEnd(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.PageDragEnd, TabController.PageDragQuit
Cursor = Cursors.Default
End Sub
Private Sub TabController_PageDragMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.PageDragMove
Dim sourceTab As Magic.Controls.TabPage = TabController.SelectedTab
Dim destinationTab As Magic.Controls.TabPage = TabController.TabPageFromPoint(e.Location)
If Not TabController.TabPages.Contains(destinationTab) Or sourceTab Is destinationTab Then Return
Dim targetIndex As Integer = TabController.TabPages.IndexOf(destinationTab)
TabController.TabPages.SuspendEvents()
TabController.TabPages.Remove(sourceTab)
TabController.TabPages.Insert(targetIndex, sourceTab)
TabController.SelectedTab = sourceTab
TabController.TabPages.ResumeEvents()
End Sub
#End Region
End Class
End Namespace
End Namespace