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

994 lines
52 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
Imports mRemoteNG.Config
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 _documentHandlersAdded As Boolean = False
Private _floatHandlersAdded As Boolean = False
Private Sub Connection_DockStateChanged(ByVal sender As System.Object, ByVal e As EventArgs) Handles Me.DockStateChanged
If DockState = DockState.Float Then
If _documentHandlersAdded Then
RemoveHandler frmMain.ResizeBegin, AddressOf Connection_ResizeBegin
RemoveHandler frmMain.ResizeEnd, AddressOf Connection_ResizeEnd
_documentHandlersAdded = False
End If
AddHandler DockHandler.FloatPane.FloatWindow.ResizeBegin, AddressOf Connection_ResizeBegin
AddHandler DockHandler.FloatPane.FloatWindow.ResizeEnd, AddressOf Connection_ResizeEnd
_floatHandlersAdded = True
ElseIf DockState = DockState.Document Then
If _floatHandlersAdded Then
RemoveHandler DockHandler.FloatPane.FloatWindow.ResizeBegin, AddressOf Connection_ResizeBegin
RemoveHandler DockHandler.FloatPane.FloatWindow.ResizeEnd, AddressOf Connection_ResizeEnd
_floatHandlersAdded = False
End If
AddHandler frmMain.ResizeBegin, AddressOf Connection_ResizeBegin
AddHandler frmMain.ResizeEnd, AddressOf Connection_ResizeEnd
_documentHandlersAdded = True
End If
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 FormClosingEventArgs) Handles Me.FormClosing
If Not frmMain.IsClosing And ( _
(My.Settings.ConfirmCloseConnection = ConfirmClose.All And TabController.TabPages.Count > 0) Or _
(My.Settings.ConfirmCloseConnection = ConfirmClose.Multiple And TabController.TabPages.Count > 1)) 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 = My.Settings.ConfirmCloseConnection - 1
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 interfaceControl As mRemoteNG.Connection.InterfaceControl = tabP.Tag
interfaceControl.Protocol.Close()
End If
Next
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.Connection.Connection_FormClosing() failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Public Shadows Event ResizeBegin As EventHandler
Private Sub Connection_ResizeBegin(ByVal sender As System.Object, ByVal e As EventArgs)
RaiseEvent ResizeBegin(Me, e)
End Sub
Public Shadows Event ResizeEnd As EventHandler
Public Sub Connection_ResizeEnd(ByVal sender As System.Object, ByVal e As EventArgs)
RaiseEvent ResizeEnd(sender, e)
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 Magic.Controls.TabPage = TabController.SelectedTab
If My.Settings.ConfirmCloseConnection = ConfirmClose.All 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 = My.Settings.ConfirmCloseConnection - 1
End If
If result = DialogResult.No Then
Exit Sub
End If
End If
Try
If selectedTab.Tag IsNot Nothing Then
Dim interfaceControl As mRemoteNG.Connection.InterfaceControl = selectedTab.Tag
interfaceControl.Protocol.Close()
Else
CloseTab(selectedTab)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.Connection.CloseConnectionTab() 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
_firstClickTicks = 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
Dim rdp As mRemoteNG.Connection.Protocol.RDP = IC.Protocol
cmenTabFullscreen.Enabled = True
cmenTabFullscreen.Checked = rdp.Fullscreen
cmenTabSmartSize.Enabled = True
cmenTabSmartSize.Checked = rdp.SmartSize
Else
cmenTabFullscreen.Enabled = False
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 _firstClickTicks As Integer = 0
Private _doubleClickRectangle As Rectangle
Private Sub TabController_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.MouseUp
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 - _firstClickTicks
If elapsedTicks > SystemInformation.DoubleClickTime Or Not _doubleClickRectangle.Contains(MousePosition) Then
_firstClickTicks = currentTicks
_doubleClickRectangle = New Rectangle(MousePosition.X - (SystemInformation.DoubleClickSize.Width / 2), MousePosition.Y - (SystemInformation.DoubleClickSize.Height / 2), SystemInformation.DoubleClickSize.Width, SystemInformation.DoubleClickSize.Height)
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"
Public Property InTabDrag As Boolean = False
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_PageDragMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.PageDragMove
InTabDrag = True ' For some reason PageDragStart gets raised again after PageDragEnd so set this here instead
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
Private Sub TabController_PageDragEnd(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.PageDragEnd, TabController.PageDragQuit
Cursor = Cursors.Default
InTabDrag = False
Dim interfaceControl As mRemoteNG.Connection.InterfaceControl = TryCast(TabController.SelectedTab.Tag, mRemoteNG.Connection.InterfaceControl)
If interfaceControl IsNot Nothing Then interfaceControl.Protocol.Focus()
End Sub
#End Region
End Class
End Namespace
End Namespace