From d18a510310dec5cf90897687f4588a0354e316c8 Mon Sep 17 00:00:00 2001 From: Riley McArdle Date: Sun, 6 Oct 2013 20:30:38 -0500 Subject: [PATCH] Fix issue MR-141 - Add a default protocol option Fix issue MR-367 - Make the 'Connect' button on the 'Quick Connect' toolbar a forced dropdown --- CHANGELOG.TXT | 4 + mRemoteV1/App/App.Runtime.vb | 125 +++-- mRemoteV1/Connection/Connection.Info.vb | 44 +- .../Connection.Protocol.Protocols.vb | 17 +- .../Connection/Connection.QuickConnect.vb | 31 -- mRemoteV1/Controls/QuickConnectComboBox.vb | 165 +++++++ mRemoteV1/Controls/ToolStripSplitButton.vb | 42 ++ mRemoteV1/Forms/frmMain.Designer.vb | 437 +++++++++--------- mRemoteV1/Forms/frmMain.resx | 226 ++++----- mRemoteV1/Forms/frmMain.vb | 143 +++--- mRemoteV1/Language/Language.Designer.vb | 11 +- mRemoteV1/Language/Language.de.resx | 3 - mRemoteV1/Language/Language.es.resx | 3 - mRemoteV1/Language/Language.fr.resx | 3 - mRemoteV1/Language/Language.it.resx | 3 - mRemoteV1/Language/Language.nb-NO.resx | 3 - mRemoteV1/Language/Language.nl.resx | 3 - mRemoteV1/Language/Language.pt.resx | 3 - mRemoteV1/Language/Language.resx | 3 - mRemoteV1/Language/Language.ru.resx | 3 - mRemoteV1/Language/Language.uk.resx | 3 - mRemoteV1/Language/Language.zh-CN.resx | 3 - mRemoteV1/Language/Language.zh-TW.resx | 3 - mRemoteV1/My Project/Settings.Designer.vb | 14 + mRemoteV1/My Project/Settings.settings | 3 + mRemoteV1/UI/UI.Window.QuickConnect.resx | 120 ----- mRemoteV1/UI/UI.Window.QuickConnect.vb | 136 ------ mRemoteV1/app.config | 3 + mRemoteV1/mRemoteV1.vbproj | 34 +- 29 files changed, 759 insertions(+), 832 deletions(-) delete mode 100644 mRemoteV1/Connection/Connection.QuickConnect.vb create mode 100644 mRemoteV1/Controls/QuickConnectComboBox.vb create mode 100644 mRemoteV1/Controls/ToolStripSplitButton.vb delete mode 100644 mRemoteV1/UI/UI.Window.QuickConnect.resx delete mode 100644 mRemoteV1/UI/UI.Window.QuickConnect.vb diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT index 898e6fe9..2c94d7a5 100644 --- a/CHANGELOG.TXT +++ b/CHANGELOG.TXT @@ -1,3 +1,7 @@ +1.72: + Fixed issue MR-141 - Add a default protocol option + Fixed issue MR-367 - Make the 'Connect' button on the 'Quick Connect' toolbar a forced dropdown + 1.71 (2013-10-01): Fixed issue MR-495 - Having a negative range in port scan creates memory exhaustion. Fixed issue MR-514 - Window Proxy test failed without close button diff --git a/mRemoteV1/App/App.Runtime.vb b/mRemoteV1/App/App.Runtime.vb index 5fdd784c..f1c83de6 100644 --- a/mRemoteV1/App/App.Runtime.vb +++ b/mRemoteV1/App/App.Runtime.vb @@ -105,11 +105,11 @@ Namespace App End Property Private Shared _notificationAreaIcon As Tools.Controls.NotificationAreaIcon - Public Shared Property NotificationAreaIcon() As Controls.NotificationAreaIcon + Public Shared Property NotificationAreaIcon() As Tools.Controls.NotificationAreaIcon Get Return _notificationAreaIcon End Get - Set(ByVal value As Controls.NotificationAreaIcon) + Set(ByVal value As Tools.Controls.NotificationAreaIcon) _notificationAreaIcon = value End Set End Property @@ -218,8 +218,6 @@ Namespace App Public Shared sessionsPanel As New DockContent Public Shared screenshotForm As UI.Window.ScreenshotManager Public Shared screenshotPanel As New DockContent - Public Shared quickyForm As UI.Window.QuickConnect - Public Shared quickyPanel As New DockContent Public Shared optionsForm As frmOptions Public Shared optionsPanel As New DockContent Public Shared exportForm As UI.Window.Export @@ -421,9 +419,6 @@ Namespace App Windows.screenshotForm = New UI.Window.ScreenshotManager(Windows.screenshotPanel) Windows.screenshotPanel = Windows.screenshotForm - Windows.quickyForm = New UI.Window.QuickConnect(Windows.quickyPanel) - Windows.quickyPanel = Windows.quickyForm - Windows.updateForm = New UI.Window.Update(Windows.updatePanel) Windows.updatePanel = Windows.updateForm @@ -443,13 +438,7 @@ Namespace App Windows.configPanel.Show(frmMain.pnlDock) Windows.configPanel.DockTo(Windows.treePanel.Pane, DockStyle.Bottom, -1) - Windows.quickyPanel.Show(frmMain.pnlDock, DockState.DockBottomAutoHide) - Windows.screenshotPanel.Show(Windows.quickyPanel.Pane, Windows.quickyPanel) - Windows.sessionsPanel.Show(Windows.quickyPanel.Pane, Windows.screenshotPanel) - Windows.errorsPanel.Show(Windows.quickyPanel.Pane, Windows.sessionsPanel) - Windows.screenshotForm.Hide() - Windows.quickyForm.Hide() frmMain.pnlDock.Visible = True End Sub @@ -1228,7 +1217,7 @@ Namespace App Public Shared Sub ImportConnectionsRdpFile() Try - Dim openFileDialog As OpenFileDialog = Controls.ImportConnectionsRdpFileDialog + Dim openFileDialog As OpenFileDialog = Tools.Controls.ImportConnectionsRdpFileDialog If Not openFileDialog.ShowDialog = DialogResult.OK Then Return For Each fileName As String In openFileDialog.FileNames @@ -1518,10 +1507,10 @@ Namespace App Dim saveAsDialog As SaveFileDialog If rootNode Is Nothing Then rootNode = Windows.treeForm.tvConnections.Nodes(0) - saveAsDialog = Controls.ConnectionsSaveAsDialog + saveAsDialog = Tools.Controls.ConnectionsSaveAsDialog Else export = True - saveAsDialog = Controls.ConnectionsExportDialog + saveAsDialog = Tools.Controls.ConnectionsExportDialog End If If saveAsDialog.ShowDialog = System.Windows.Forms.DialogResult.OK Then @@ -1571,41 +1560,34 @@ Namespace App #End Region #Region "Opening Connection" - Public Shared Function CreateQuicky(ByVal ConString As String, Optional ByVal Protocol As Connection.Protocol.Protocols = Connection.Protocol.Protocols.NONE) As Connection.Info + Public Shared Function CreateQuickConnect(ByVal connectionString As String, ByVal protocol As Protocol.Protocols) As Connection.Info Try - Dim Uri As New System.Uri("dummyscheme" + System.Uri.SchemeDelimiter + ConString) + Dim uri As New Uri("dummyscheme" & uri.SchemeDelimiter & connectionString) - If Not String.IsNullOrEmpty(Uri.Host) Then - Dim newConnectionInfo As New Connection.Info + If String.IsNullOrEmpty(uri.Host) Then Return Nothing - If My.Settings.IdentifyQuickConnectTabs Then - newConnectionInfo.Name = String.Format(My.Language.strQuick, Uri.Host) - Else - newConnectionInfo.Name = Uri.Host - End If + Dim newConnectionInfo As New Connection.Info - newConnectionInfo.Protocol = Protocol - newConnectionInfo.Hostname = Uri.Host - If Uri.Port = -1 Then - newConnectionInfo.Port = Nothing - Else - newConnectionInfo.Port = Uri.Port - End If - newConnectionInfo.IsQuicky = True - - Windows.quickyForm.ConnectionInfo = newConnectionInfo - - If Protocol = Connection.Protocol.Protocols.NONE Then - Windows.quickyPanel.Show(frmMain.pnlDock, DockState.DockBottomAutoHide) - End If - - Return newConnectionInfo + If My.Settings.IdentifyQuickConnectTabs Then + newConnectionInfo.Name = String.Format(My.Language.strQuick, uri.Host) + Else + newConnectionInfo.Name = uri.Host End If - Catch ex As Exception - MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strQuickConnectFailed & vbNewLine & ex.Message) - End Try - Return Nothing + newConnectionInfo.Protocol = protocol + newConnectionInfo.Hostname = uri.Host + If uri.Port = -1 Then + newConnectionInfo.SetDefaultPort() + Else + newConnectionInfo.Port = uri.Port + End If + newConnectionInfo.IsQuickConnect = True + + Return newConnectionInfo + Catch ex As Exception + MessageCollector.AddExceptionMessage(My.Language.strQuickConnectFailed, ex, MessageClass.ErrorMsg) + Return Nothing + End Try End Function Public Shared Sub OpenConnection() @@ -1672,7 +1654,6 @@ Namespace App End Try End Sub - Private Shared Sub OpenConnectionFinal(ByVal newConnectionInfo As mRemoteNG.Connection.Info, ByVal Force As mRemoteNG.Connection.Info.Force, ByVal ConForm As Form) Try If newConnectionInfo.Hostname = "" And newConnectionInfo.Protocol <> Connection.Protocol.Protocols.IntApp Then @@ -1693,31 +1674,31 @@ Namespace App End If End If - Dim newProtocol As New Connection.Protocol.Base + Dim newProtocol As Protocol.Base ' Create connection based on protocol type Select Case newConnectionInfo.Protocol - Case Connection.Protocol.Protocols.RDP - newProtocol = New Connection.Protocol.RDP - Case Connection.Protocol.Protocols.VNC - newProtocol = New Connection.Protocol.VNC - Case Connection.Protocol.Protocols.SSH1 - newProtocol = New Connection.Protocol.SSH1 - Case Connection.Protocol.Protocols.SSH2 - newProtocol = New Connection.Protocol.SSH2 - Case Connection.Protocol.Protocols.Telnet - newProtocol = New Connection.Protocol.Telnet - Case Connection.Protocol.Protocols.Rlogin - newProtocol = New Connection.Protocol.Rlogin - Case Connection.Protocol.Protocols.RAW - newProtocol = New Connection.Protocol.RAW - Case Connection.Protocol.Protocols.HTTP - newProtocol = New Connection.Protocol.HTTP(newConnectionInfo.RenderingEngine) - Case Connection.Protocol.Protocols.HTTPS - newProtocol = New Connection.Protocol.HTTPS(newConnectionInfo.RenderingEngine) - Case Connection.Protocol.Protocols.ICA - newProtocol = New Connection.Protocol.ICA - Case Connection.Protocol.Protocols.IntApp - newProtocol = New Connection.Protocol.IntApp + Case Protocol.Protocols.RDP + newProtocol = New Protocol.RDP + Case Protocol.Protocols.VNC + newProtocol = New Protocol.VNC + Case Protocol.Protocols.SSH1 + newProtocol = New Protocol.SSH1 + Case Protocol.Protocols.SSH2 + newProtocol = New Protocol.SSH2 + Case Protocol.Protocols.Telnet + newProtocol = New Protocol.Telnet + Case Protocol.Protocols.Rlogin + newProtocol = New Protocol.Rlogin + Case Protocol.Protocols.RAW + newProtocol = New Protocol.RAW + Case Protocol.Protocols.HTTP + newProtocol = New Protocol.HTTP(newConnectionInfo.RenderingEngine) + Case Protocol.Protocols.HTTPS + newProtocol = New Protocol.HTTPS(newConnectionInfo.RenderingEngine) + Case Protocol.Protocols.ICA + newProtocol = New Protocol.ICA + Case Protocol.Protocols.IntApp + newProtocol = New Protocol.IntApp If newConnectionInfo.ExtApp = "" Then Throw New Exception(My.Language.strNoExtAppDefined) @@ -1786,7 +1767,7 @@ Namespace App newConnectionInfo.OpenConnections.Add(newProtocol) - If newConnectionInfo.IsQuicky = False Then + If newConnectionInfo.IsQuickConnect = False Then If newConnectionInfo.Protocol <> Connection.Protocol.Protocols.IntApp Then Tree.Node.SetNodeImage(newConnectionInfo.TreeNode, Images.Enums.TreeImage.ConnectionOpen) Else @@ -1853,7 +1834,7 @@ Namespace App Prot.InterfaceControl.Info.OpenConnections.Remove(Prot) - If Prot.InterfaceControl.Info.OpenConnections.Count < 1 And Prot.InterfaceControl.Info.IsQuicky = False Then + If Prot.InterfaceControl.Info.OpenConnections.Count < 1 And Prot.InterfaceControl.Info.IsQuickConnect = False Then Tree.Node.SetNodeImage(Prot.InterfaceControl.Info.TreeNode, Images.Enums.TreeImage.ConnectionClosed) End If @@ -1931,7 +1912,7 @@ Namespace App cI.Protocol = Connection.Protocol.Protocols.HTTP End If cI.SetDefaultPort() - cI.IsQuicky = True + cI.IsQuickConnect = True App.Runtime.OpenConnection(cI, mRemoteNG.Connection.Info.Force.DoNotJump) End Sub diff --git a/mRemoteV1/Connection/Connection.Info.vb b/mRemoteV1/Connection/Connection.Info.vb index 2897e410..561ec888 100644 --- a/mRemoteV1/Connection/Connection.Info.vb +++ b/mRemoteV1/Connection/Connection.Info.vb @@ -1505,15 +1505,15 @@ Namespace Connection End Set End Property - Private _IsQuicky As Boolean = False + Private _isQuickConnect As Boolean = False _ - Public Property IsQuicky() As Boolean + Public Property IsQuickConnect() As Boolean Get - Return Me._IsQuicky + Return _isQuickConnect End Get Set(ByVal value As Boolean) - Me._IsQuicky = value + _isQuickConnect = value End Set End Property @@ -1555,35 +1555,43 @@ Namespace Connection End If End Sub - Public Sub SetDefaultPort() + Protected Shared Function GetDefaultPort(ByVal protocol As Protocol.Protocols) As Integer Try - Select Case Me._Protocol + Select Case protocol Case Connection.Protocol.Protocols.RDP - Me._Port = Connection.Protocol.RDP.Defaults.Port + Return Connection.Protocol.RDP.Defaults.Port Case Connection.Protocol.Protocols.VNC - Me._Port = Connection.Protocol.VNC.Defaults.Port + Return Connection.Protocol.VNC.Defaults.Port Case Connection.Protocol.Protocols.SSH1 - Me._Port = Connection.Protocol.SSH1.Defaults.Port + Return Connection.Protocol.SSH1.Defaults.Port Case Connection.Protocol.Protocols.SSH2 - Me._Port = Connection.Protocol.SSH2.Defaults.Port + Return Connection.Protocol.SSH2.Defaults.Port Case Connection.Protocol.Protocols.Telnet - Me._Port = Connection.Protocol.Telnet.Defaults.Port + Return Connection.Protocol.Telnet.Defaults.Port Case Connection.Protocol.Protocols.Rlogin - Me._Port = Connection.Protocol.Rlogin.Defaults.Port + Return Connection.Protocol.Rlogin.Defaults.Port Case Connection.Protocol.Protocols.RAW - Me._Port = Connection.Protocol.RAW.Defaults.Port + Return Connection.Protocol.RAW.Defaults.Port Case Connection.Protocol.Protocols.HTTP - Me._Port = Connection.Protocol.HTTP.Defaults.Port + Return Connection.Protocol.HTTP.Defaults.Port Case Connection.Protocol.Protocols.HTTPS - Me._Port = Connection.Protocol.HTTPS.Defaults.Port + Return Connection.Protocol.HTTPS.Defaults.Port Case Connection.Protocol.Protocols.ICA - Me._Port = Connection.Protocol.ICA.Defaults.Port + Return Connection.Protocol.ICA.Defaults.Port Case Connection.Protocol.Protocols.IntApp - Me._Port = Connection.Protocol.IntApp.Defaults.Port + Return Connection.Protocol.IntApp.Defaults.Port End Select Catch ex As Exception - MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strConnectionSetDefaultPortFailed & vbNewLine & ex.Message) + MessageCollector.AddExceptionMessage(My.Language.strConnectionSetDefaultPortFailed, ex, Messages.MessageClass.ErrorMsg) End Try + End Function + + Public Function GetDefaultPort() As Integer + Return GetDefaultPort(_Protocol) + End Function + + Public Sub SetDefaultPort() + _Port = GetDefaultPort() End Sub #End Region diff --git a/mRemoteV1/Connection/Connection.Protocol.Protocols.vb b/mRemoteV1/Connection/Connection.Protocol.Protocols.vb index 2a04498e..217b177b 100644 --- a/mRemoteV1/Connection/Connection.Protocol.Protocols.vb +++ b/mRemoteV1/Connection/Connection.Protocol.Protocols.vb @@ -1,8 +1,21 @@ -Imports System.ComponentModel Imports mRemoteNG.Tools.LocalizedAttributes Namespace Connection Namespace Protocol + Public Class Converter + Public Shared Function ProtocolToString(ByVal protocol As Protocols) As String + Return protocol.ToString() + End Function + + Public Shared Function StringToProtocol(ByVal protocol As String) As Protocols + Try + Return [Enum].Parse(GetType(Protocols), protocol, True) + Catch ex As Exception + Return Protocols.RDP + End Try + End Function + End Class + Public Enum Protocols _ RDP = 0 @@ -26,8 +39,6 @@ Namespace Connection ICA = 9 _ IntApp = 20 - _ - NONE = 999 End Enum End Namespace End Namespace diff --git a/mRemoteV1/Connection/Connection.QuickConnect.vb b/mRemoteV1/Connection/Connection.QuickConnect.vb deleted file mode 100644 index 77250467..00000000 --- a/mRemoteV1/Connection/Connection.QuickConnect.vb +++ /dev/null @@ -1,31 +0,0 @@ -Imports mRemoteNG.App.Runtime - -Namespace Connection - Public Class QuickConnect - Private Shared qBox As ToolStripComboBox = frmMain.cmbQuickConnect - - Public Class History - Public Shared Function Exists(ByVal Text As String) As Boolean - Try - For i As Integer = 0 To qBox.Items.Count - 1 - If qBox.Items(i) = Text Then - Return True - End If - Next - Catch ex As Exception - MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strQuickConnectHistoryExistsFailed & vbNewLine & ex.Message, True) - End Try - - Return False - End Function - - Public Shared Sub Add(ByVal Text As String) - Try - qBox.Items.Insert(0, Text) - Catch ex As Exception - MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strQuickConnectAddFailed & vbNewLine & ex.Message, True) - End Try - End Sub - End Class - End Class -End Namespace \ No newline at end of file diff --git a/mRemoteV1/Controls/QuickConnectComboBox.vb b/mRemoteV1/Controls/QuickConnectComboBox.vb new file mode 100644 index 00000000..d9e4e6f3 --- /dev/null +++ b/mRemoteV1/Controls/QuickConnectComboBox.vb @@ -0,0 +1,165 @@ +Imports mRemoteNG.App.Runtime + +Namespace Controls + Public Class QuickConnectComboBox + Inherits ToolStripComboBox + + Private WithEvents _comboBox As ComboBox + Private _ignoreEnter As Boolean = False + + Public Sub New() + _comboBox = ComboBox + _comboBox.DrawMode = DrawMode.OwnerDrawFixed + + ' This makes it so that _ignoreEnter works correctly before any items are added to the combo box + _comboBox.Items.Clear() + End Sub + + Private Sub ComboBox_PreviewKeyDown(ByVal sender As Object, ByVal e As PreviewKeyDownEventArgs) Handles _comboBox.PreviewKeyDown + If e.KeyCode = Keys.Enter And _comboBox.DroppedDown Then _ignoreEnter = True + End Sub + + Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs) + MyBase.OnKeyDown(e) + If e.KeyCode = Keys.Enter Then + ' Only connect if Enter was not pressed while the combo box was dropped down + If Not _ignoreEnter Then OnConnectRequested(New ConnectRequestedEventArgs(_comboBox.Text)) + _ignoreEnter = False + e.Handled = True + ElseIf e.KeyCode = Keys.Delete And _comboBox.DroppedDown Then + If Not _comboBox.SelectedIndex = -1 Then + ' Items can't be removed from the ComboBox while it is dropped down without possibly causing + ' an exception so we must close it, delete the item, and then drop it down again. When we + ' close it programmatically, the SelectedItem may revert to Nothing, so we must save it first. + Dim item As Object = _comboBox.SelectedItem + _comboBox.DroppedDown = False + _comboBox.Items.Remove(item) + _comboBox.SelectedIndex = -1 + If Not _comboBox.Items.Count = 0 Then + _comboBox.DroppedDown = True + End If + End If + e.Handled = True + End If + End Sub + + Private Sub ComboBox_SelectedIndexChanged(sender As System.Object, e As EventArgs) Handles _comboBox.SelectedIndexChanged + If Not TypeOf _comboBox.SelectedItem Is HistoryItem Then Return + Dim historyItem As HistoryItem = CType(_comboBox.SelectedItem, HistoryItem) + OnProtocolChanged(New ProtocolChangedEventArgs(historyItem.ConnectionInfo.Protocol)) + End Sub + + Private Shared Sub ComboBox_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles _comboBox.DrawItem + Dim comboBox As ComboBox = TryCast(sender, ComboBox) + If comboBox Is Nothing Then Return + Dim drawItem As Object = comboBox.Items(e.Index) + + Dim drawString As String + If TypeOf drawItem Is HistoryItem Then + Dim historyItem As HistoryItem = CType(drawItem, HistoryItem) + drawString = historyItem.ToString(includeProtocol:=True) + Else + drawString = drawItem.ToString() + End If + + e.DrawBackground() + e.Graphics.DrawString(drawString, e.Font, New SolidBrush(e.ForeColor), New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)) + e.DrawFocusRectangle() + End Sub + + Private Structure HistoryItem + Implements IEquatable(Of HistoryItem) + + Public Property ConnectionInfo As Connection.Info + + Public Overloads Function Equals(other As HistoryItem) As Boolean Implements IEquatable(Of HistoryItem).Equals + If Not ConnectionInfo.Hostname = other.ConnectionInfo.Hostname Then Return False + If Not ConnectionInfo.Port = other.ConnectionInfo.Port Then Return False + If Not ConnectionInfo.Protocol = other.ConnectionInfo.Protocol Then Return False + Return True + End Function + + Public Overrides Function ToString() As String + Return ToString(False) + End Function + + Public Overloads Function ToString(ByVal includeProtocol As Boolean) As String + Dim port As String = String.Empty + If Not ConnectionInfo.Port = ConnectionInfo.GetDefaultPort() Then + port = String.Format(":{0}", ConnectionInfo.Port) + End If + If includeProtocol Then + Return String.Format("{0}{1} ({2})", ConnectionInfo.Hostname, port, ConnectionInfo.Protocol) + Else + Return String.Format("{0}{1}", ConnectionInfo.Hostname, port) + End If + End Function + End Structure + + Private Function Exists(ByVal searchItem As HistoryItem) As Boolean + For Each item As Object In _comboBox.Items + If Not TypeOf item Is HistoryItem Then Continue For + Dim historyItem As HistoryItem = CType(item, HistoryItem) + If historyItem.Equals(searchItem) Then Return True + Next + Return False + End Function + + Public Sub Add(ByVal connectionInfo As Connection.Info) + Try + Dim historyItem As New HistoryItem + historyItem.ConnectionInfo = connectionInfo + If Not Exists(historyItem) Then _comboBox.Items.Insert(0, historyItem) + Catch ex As Exception + MessageCollector.AddExceptionMessage(My.Language.strQuickConnectAddFailed, ex, Messages.MessageClass.ErrorMsg, True) + End Try + End Sub + +#Region "Events" + Public Class ConnectRequestedEventArgs + Inherits EventArgs + + Public Sub New(ByVal connectionString As String) + _connectionString = connectionString + End Sub + + Private ReadOnly _connectionString As String + + Public ReadOnly Property ConnectionString As String + Get + Return _connectionString + End Get + End Property + End Class + + Public Event ConnectRequested(ByVal sender As Object, ByVal e As ConnectRequestedEventArgs) + + Protected Overridable Sub OnConnectRequested(ByVal e As ConnectRequestedEventArgs) + RaiseEvent ConnectRequested(Me, New ConnectRequestedEventArgs(e.ConnectionString)) + End Sub + + Public Class ProtocolChangedEventArgs + Inherits EventArgs + + Public Sub New(ByVal protocol As Connection.Protocol.Protocols) + _protocol = protocol + End Sub + + Private ReadOnly _protocol As Connection.Protocol.Protocols + + Public ReadOnly Property Protocol As Connection.Protocol.Protocols + Get + Return _protocol + End Get + End Property + End Class + + Public Event ProtocolChanged(ByVal sender As Object, ByVal e As ProtocolChangedEventArgs) + + Protected Overridable Sub OnProtocolChanged(ByVal e As ProtocolChangedEventArgs) + RaiseEvent ProtocolChanged(Me, New ProtocolChangedEventArgs(e.Protocol)) + End Sub +#End Region + End Class +End Namespace + diff --git a/mRemoteV1/Controls/ToolStripSplitButton.vb b/mRemoteV1/Controls/ToolStripSplitButton.vb new file mode 100644 index 00000000..4ee6bc8b --- /dev/null +++ b/mRemoteV1/Controls/ToolStripSplitButton.vb @@ -0,0 +1,42 @@ +Namespace Controls + Public Class ToolStripSplitButton + Inherits Windows.Forms.ToolStripSplitButton + + Public Overloads Property DropDown As ToolStripDropDown + Get + Return MyBase.DropDown + End Get + Set(value As ToolStripDropDown) + If MyBase.DropDown IsNot value Then + MyBase.DropDown = value + AddHandler MyBase.DropDown.Closing, AddressOf DropDown_Closing + End If + End Set + End Property + + Private Sub DropDown_Closing(ByVal sender As Object, e As ToolStripDropDownClosingEventArgs) + If Not e.CloseReason = ToolStripDropDownCloseReason.AppClicked Then Return + + Dim dropDownButtonBoundsClient As Rectangle = DropDownButtonBounds ' Relative to the ToolStripSplitButton + dropDownButtonBoundsClient.Offset(Bounds.Location) ' Relative to the parent of the ToolStripSplitButton + Dim dropDownButtonBoundsScreen As Rectangle = GetCurrentParent().RectangleToScreen(dropDownButtonBoundsClient) ' Relative to the screen + + If dropDownButtonBoundsScreen.Contains(Control.MousePosition) Then e.Cancel = True + End Sub + + Protected Overrides Sub OnMouseDown(e As MouseEventArgs) + _dropDownVisibleOnMouseDown = DropDown.Visible + MyBase.OnMouseDown(e) + End Sub + + Protected Overrides Sub OnMouseUp(e As MouseEventArgs) + If _dropDownVisibleOnMouseDown Then + DropDown.Close() + Else + MyBase.OnMouseUp(e) + End If + End Sub + + Private _dropDownVisibleOnMouseDown As Boolean = False + End Class +End Namespace \ No newline at end of file diff --git a/mRemoteV1/Forms/frmMain.Designer.vb b/mRemoteV1/Forms/frmMain.Designer.vb index a4c196d3..933657d7 100644 --- a/mRemoteV1/Forms/frmMain.Designer.vb +++ b/mRemoteV1/Forms/frmMain.Designer.vb @@ -22,111 +22,113 @@ Partial Class frmMain 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Me.components = New System.ComponentModel.Container - Dim DockPanelSkin1 As WeifenLuo.WinFormsUI.Docking.DockPanelSkin = New WeifenLuo.WinFormsUI.Docking.DockPanelSkin - Dim AutoHideStripSkin1 As WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin = New WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin - Dim DockPanelGradient1 As WeifenLuo.WinFormsUI.Docking.DockPanelGradient = New WeifenLuo.WinFormsUI.Docking.DockPanelGradient - Dim TabGradient1 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient - Dim DockPaneStripSkin1 As WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin = New WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin - Dim DockPaneStripGradient1 As WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient = New WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient - Dim TabGradient2 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient - Dim DockPanelGradient2 As WeifenLuo.WinFormsUI.Docking.DockPanelGradient = New WeifenLuo.WinFormsUI.Docking.DockPanelGradient - Dim TabGradient3 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient - Dim DockPaneStripToolWindowGradient1 As WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient = New WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient - Dim TabGradient4 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient - Dim TabGradient5 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient - Dim DockPanelGradient3 As WeifenLuo.WinFormsUI.Docking.DockPanelGradient = New WeifenLuo.WinFormsUI.Docking.DockPanelGradient - Dim TabGradient6 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient - Dim TabGradient7 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient + Me.components = New System.ComponentModel.Container() + Dim DockPanelSkin2 As WeifenLuo.WinFormsUI.Docking.DockPanelSkin = New WeifenLuo.WinFormsUI.Docking.DockPanelSkin() + Dim AutoHideStripSkin2 As WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin = New WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin() + Dim DockPanelGradient4 As WeifenLuo.WinFormsUI.Docking.DockPanelGradient = New WeifenLuo.WinFormsUI.Docking.DockPanelGradient() + Dim TabGradient8 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient() + Dim DockPaneStripSkin2 As WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin = New WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin() + Dim DockPaneStripGradient2 As WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient = New WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient() + Dim TabGradient9 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient() + Dim DockPanelGradient5 As WeifenLuo.WinFormsUI.Docking.DockPanelGradient = New WeifenLuo.WinFormsUI.Docking.DockPanelGradient() + Dim TabGradient10 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient() + Dim DockPaneStripToolWindowGradient2 As WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient = New WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient() + Dim TabGradient11 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient() + Dim TabGradient12 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient() + Dim DockPanelGradient6 As WeifenLuo.WinFormsUI.Docking.DockPanelGradient = New WeifenLuo.WinFormsUI.Docking.DockPanelGradient() + Dim TabGradient13 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient() + Dim TabGradient14 As WeifenLuo.WinFormsUI.Docking.TabGradient = New WeifenLuo.WinFormsUI.Docking.TabGradient() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain)) - Me.pnlDock = New WeifenLuo.WinFormsUI.Docking.DockPanel - Me.msMain = New System.Windows.Forms.MenuStrip - Me.mMenFile = New System.Windows.Forms.ToolStripMenuItem - Me.mMenFileNewConnection = New System.Windows.Forms.ToolStripMenuItem - Me.mMenFileNewFolder = New System.Windows.Forms.ToolStripMenuItem - Me.mMenFileSep1 = New System.Windows.Forms.ToolStripSeparator - Me.mMenFileNew = New System.Windows.Forms.ToolStripMenuItem - Me.mMenFileLoad = New System.Windows.Forms.ToolStripMenuItem - Me.mMenFileSave = New System.Windows.Forms.ToolStripMenuItem - Me.mMenFileSaveAs = New System.Windows.Forms.ToolStripMenuItem - Me.mMenFileSep2 = New System.Windows.Forms.ToolStripSeparator - Me.mMenFileImportExport = New System.Windows.Forms.ToolStripMenuItem - Me.ImportFromXMLFileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem - Me.ImportFromRDPFileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem - Me.ImportFromActiveDirectoryToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem - Me.ImportFromPortScanToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem - Me.ToolStripSeparator6 = New System.Windows.Forms.ToolStripSeparator - Me.ExportToXMLFileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem - Me.mMenFileSep3 = New System.Windows.Forms.ToolStripSeparator - Me.mMenFileDelete = New System.Windows.Forms.ToolStripMenuItem - Me.mMenFileRename = New System.Windows.Forms.ToolStripMenuItem - Me.mMenFileDuplicate = New System.Windows.Forms.ToolStripMenuItem - Me.mMenFileSep4 = New System.Windows.Forms.ToolStripSeparator - Me.mMenFileExit = New System.Windows.Forms.ToolStripMenuItem - Me.mMenView = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewAddConnectionPanel = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewConnectionPanels = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewSep1 = New System.Windows.Forms.ToolStripSeparator - Me.mMenViewConnections = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewConfig = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewSessions = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewErrorsAndInfos = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewScreenshotManager = New System.Windows.Forms.ToolStripMenuItem - Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator - Me.mMenViewJumpTo = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewJumpToConnectionsConfig = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewJumpToSessionsScreenshots = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewJumpToErrorsInfos = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewResetLayout = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewSep2 = New System.Windows.Forms.ToolStripSeparator - Me.mMenViewQuickConnectToolbar = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewExtAppsToolbar = New System.Windows.Forms.ToolStripMenuItem - Me.mMenViewSep3 = New System.Windows.Forms.ToolStripSeparator - Me.mMenViewFullscreen = New System.Windows.Forms.ToolStripMenuItem - Me.mMenTools = New System.Windows.Forms.ToolStripMenuItem - Me.mMenToolsSSHTransfer = New System.Windows.Forms.ToolStripMenuItem - Me.mMenToolsUVNCSC = New System.Windows.Forms.ToolStripMenuItem - Me.mMenToolsExternalApps = New System.Windows.Forms.ToolStripMenuItem - Me.mMenToolsPortScan = New System.Windows.Forms.ToolStripMenuItem - Me.mMenToolsSep1 = New System.Windows.Forms.ToolStripSeparator - Me.mMenToolsComponentsCheck = New System.Windows.Forms.ToolStripMenuItem - Me.mMenToolsOptions = New System.Windows.Forms.ToolStripMenuItem - Me.mMenInfo = New System.Windows.Forms.ToolStripMenuItem - Me.mMenInfoHelp = New System.Windows.Forms.ToolStripMenuItem - Me.mMenInfoSep1 = New System.Windows.Forms.ToolStripSeparator - Me.mMenInfoWebsite = New System.Windows.Forms.ToolStripMenuItem - Me.mMenInfoDonate = New System.Windows.Forms.ToolStripMenuItem - Me.mMenInfoForum = New System.Windows.Forms.ToolStripMenuItem - Me.mMenInfoBugReport = New System.Windows.Forms.ToolStripMenuItem - Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator - Me.mMenInfoAnnouncements = New System.Windows.Forms.ToolStripMenuItem - Me.mMenToolsUpdate = New System.Windows.Forms.ToolStripMenuItem - Me.mMenInfoSep2 = New System.Windows.Forms.ToolStripSeparator - Me.mMenInfoAbout = New System.Windows.Forms.ToolStripMenuItem - Me.mMenSep3 = New System.Windows.Forms.ToolStripSeparator - Me.lblQuickConnect = New System.Windows.Forms.ToolStripLabel - Me.cmbQuickConnect = New System.Windows.Forms.ToolStripComboBox - Me.tsContainer = New System.Windows.Forms.ToolStripContainer - Me.tsExternalTools = New System.Windows.Forms.ToolStrip + Me.pnlDock = New WeifenLuo.WinFormsUI.Docking.DockPanel() + Me.msMain = New System.Windows.Forms.MenuStrip() + Me.mMenFile = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenFileNewConnection = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenFileNewFolder = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenFileSep1 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenFileNew = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenFileLoad = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenFileSave = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenFileSaveAs = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenFileSep2 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenFileImportExport = New System.Windows.Forms.ToolStripMenuItem() + Me.ImportFromXMLFileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ImportFromRDPFileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ImportFromActiveDirectoryToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ImportFromPortScanToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator6 = New System.Windows.Forms.ToolStripSeparator() + Me.ExportToXMLFileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenFileSep3 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenFileDelete = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenFileRename = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenFileDuplicate = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenFileSep4 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenFileExit = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenView = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewAddConnectionPanel = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewConnectionPanels = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewSep1 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenViewConnections = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewConfig = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewSessions = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewErrorsAndInfos = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewScreenshotManager = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenViewJumpTo = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewJumpToConnectionsConfig = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewJumpToSessionsScreenshots = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewJumpToErrorsInfos = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewResetLayout = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewSep2 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenViewQuickConnectToolbar = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewExtAppsToolbar = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenViewSep3 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenViewFullscreen = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenTools = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenToolsSSHTransfer = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenToolsUVNCSC = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenToolsExternalApps = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenToolsPortScan = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenToolsSep1 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenToolsComponentsCheck = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenToolsOptions = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenInfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenInfoHelp = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenInfoSep1 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenInfoWebsite = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenInfoDonate = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenInfoForum = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenInfoBugReport = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenInfoAnnouncements = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenToolsUpdate = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenInfoSep2 = New System.Windows.Forms.ToolStripSeparator() + Me.mMenInfoAbout = New System.Windows.Forms.ToolStripMenuItem() + Me.mMenSep3 = New System.Windows.Forms.ToolStripSeparator() + Me.lblQuickConnect = New System.Windows.Forms.ToolStripLabel() + Me.cmbQuickConnect = New mRemoteNG.Controls.QuickConnectComboBox() + Me.tsContainer = New System.Windows.Forms.ToolStripContainer() + Me.tsQuickConnect = New System.Windows.Forms.ToolStrip() + Me.btnQuickConnect = New mRemoteNG.Controls.ToolStripSplitButton() + Me.mnuQuickConnectProtocol = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.btnConnections = New System.Windows.Forms.ToolStripDropDownButton() + Me.mnuConnections = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.tsExternalTools = New System.Windows.Forms.ToolStrip() Me.cMenExtAppsToolbar = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.cMenToolbarShowText = New System.Windows.Forms.ToolStripMenuItem - Me.tsQuickConnect = New System.Windows.Forms.ToolStrip - Me.btnQuickyPlay = New System.Windows.Forms.ToolStripSplitButton - Me.mMenQuickyCon = New System.Windows.Forms.ToolStripMenuItem - Me.ToolStrip1 = New System.Windows.Forms.ToolStrip - Me.ToolStripButton1 = New System.Windows.Forms.ToolStripButton - Me.ToolStripButton2 = New System.Windows.Forms.ToolStripButton - Me.ToolStripButton3 = New System.Windows.Forms.ToolStripButton - Me.ToolStripSplitButton1 = New System.Windows.Forms.ToolStripDropDownButton - Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem - Me.ToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem + Me.cMenToolbarShowText = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStrip1 = New System.Windows.Forms.ToolStrip() + Me.ToolStripButton1 = New System.Windows.Forms.ToolStripButton() + Me.ToolStripButton2 = New System.Windows.Forms.ToolStripButton() + Me.ToolStripButton3 = New System.Windows.Forms.ToolStripButton() + Me.ToolStripSplitButton1 = New System.Windows.Forms.ToolStripDropDownButton() + Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem() Me.tmrAutoSave = New System.Windows.Forms.Timer(Me.components) Me.msMain.SuspendLayout() Me.tsContainer.ContentPanel.SuspendLayout() Me.tsContainer.TopToolStripPanel.SuspendLayout() Me.tsContainer.SuspendLayout() - Me.cMenExtAppsToolbar.SuspendLayout() Me.tsQuickConnect.SuspendLayout() + Me.cMenExtAppsToolbar.SuspendLayout() Me.ToolStrip1.SuspendLayout() Me.SuspendLayout() ' @@ -135,56 +137,58 @@ Partial Class frmMain Me.pnlDock.ActiveAutoHideContent = Nothing Me.pnlDock.Dock = System.Windows.Forms.DockStyle.Fill Me.pnlDock.DockBackColor = System.Drawing.SystemColors.Control - Me.pnlDock.DockLeftPortion = 230 - Me.pnlDock.DockRightPortion = 230 + Me.pnlDock.DockLeftPortion = 230.0R + Me.pnlDock.DockRightPortion = 230.0R Me.pnlDock.DocumentStyle = WeifenLuo.WinFormsUI.Docking.DocumentStyle.DockingSdi Me.pnlDock.Location = New System.Drawing.Point(0, 0) Me.pnlDock.Name = "pnlDock" - Me.pnlDock.Size = New System.Drawing.Size(842, 424) - DockPanelGradient1.EndColor = System.Drawing.SystemColors.ControlLight - DockPanelGradient1.StartColor = System.Drawing.SystemColors.ControlLight - AutoHideStripSkin1.DockStripGradient = DockPanelGradient1 - TabGradient1.EndColor = System.Drawing.SystemColors.Control - TabGradient1.StartColor = System.Drawing.SystemColors.Control - TabGradient1.TextColor = System.Drawing.SystemColors.ControlDarkDark - AutoHideStripSkin1.TabGradient = TabGradient1 - DockPanelSkin1.AutoHideStripSkin = AutoHideStripSkin1 - TabGradient2.EndColor = System.Drawing.SystemColors.ControlLightLight - TabGradient2.StartColor = System.Drawing.SystemColors.ControlLightLight - TabGradient2.TextColor = System.Drawing.SystemColors.ControlText - DockPaneStripGradient1.ActiveTabGradient = TabGradient2 - DockPanelGradient2.EndColor = System.Drawing.SystemColors.Control - DockPanelGradient2.StartColor = System.Drawing.SystemColors.Control - DockPaneStripGradient1.DockStripGradient = DockPanelGradient2 - TabGradient3.EndColor = System.Drawing.SystemColors.ControlLight - TabGradient3.StartColor = System.Drawing.SystemColors.ControlLight - TabGradient3.TextColor = System.Drawing.SystemColors.ControlText - DockPaneStripGradient1.InactiveTabGradient = TabGradient3 - DockPaneStripSkin1.DocumentGradient = DockPaneStripGradient1 - TabGradient4.EndColor = System.Drawing.SystemColors.ActiveCaption - TabGradient4.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical - TabGradient4.StartColor = System.Drawing.SystemColors.GradientActiveCaption - TabGradient4.TextColor = System.Drawing.SystemColors.ActiveCaptionText - DockPaneStripToolWindowGradient1.ActiveCaptionGradient = TabGradient4 - TabGradient5.EndColor = System.Drawing.SystemColors.Control - TabGradient5.StartColor = System.Drawing.SystemColors.Control - TabGradient5.TextColor = System.Drawing.SystemColors.ControlText - DockPaneStripToolWindowGradient1.ActiveTabGradient = TabGradient5 - DockPanelGradient3.EndColor = System.Drawing.SystemColors.ControlLight - DockPanelGradient3.StartColor = System.Drawing.SystemColors.ControlLight - DockPaneStripToolWindowGradient1.DockStripGradient = DockPanelGradient3 - TabGradient6.EndColor = System.Drawing.SystemColors.GradientInactiveCaption - TabGradient6.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical - TabGradient6.StartColor = System.Drawing.SystemColors.GradientInactiveCaption - TabGradient6.TextColor = System.Drawing.SystemColors.ControlText - DockPaneStripToolWindowGradient1.InactiveCaptionGradient = TabGradient6 - TabGradient7.EndColor = System.Drawing.Color.Transparent - TabGradient7.StartColor = System.Drawing.Color.Transparent - TabGradient7.TextColor = System.Drawing.SystemColors.ControlDarkDark - DockPaneStripToolWindowGradient1.InactiveTabGradient = TabGradient7 - DockPaneStripSkin1.ToolWindowGradient = DockPaneStripToolWindowGradient1 - DockPanelSkin1.DockPaneStripSkin = DockPaneStripSkin1 - Me.pnlDock.Skin = DockPanelSkin1 + Me.pnlDock.Size = New System.Drawing.Size(842, 449) + DockPanelGradient4.EndColor = System.Drawing.SystemColors.ControlLight + DockPanelGradient4.StartColor = System.Drawing.SystemColors.ControlLight + AutoHideStripSkin2.DockStripGradient = DockPanelGradient4 + TabGradient8.EndColor = System.Drawing.SystemColors.Control + TabGradient8.StartColor = System.Drawing.SystemColors.Control + TabGradient8.TextColor = System.Drawing.SystemColors.ControlDarkDark + AutoHideStripSkin2.TabGradient = TabGradient8 + AutoHideStripSkin2.TextFont = New System.Drawing.Font("Segoe UI", 9.0!) + DockPanelSkin2.AutoHideStripSkin = AutoHideStripSkin2 + TabGradient9.EndColor = System.Drawing.SystemColors.ControlLightLight + TabGradient9.StartColor = System.Drawing.SystemColors.ControlLightLight + TabGradient9.TextColor = System.Drawing.SystemColors.ControlText + DockPaneStripGradient2.ActiveTabGradient = TabGradient9 + DockPanelGradient5.EndColor = System.Drawing.SystemColors.Control + DockPanelGradient5.StartColor = System.Drawing.SystemColors.Control + DockPaneStripGradient2.DockStripGradient = DockPanelGradient5 + TabGradient10.EndColor = System.Drawing.SystemColors.ControlLight + TabGradient10.StartColor = System.Drawing.SystemColors.ControlLight + TabGradient10.TextColor = System.Drawing.SystemColors.ControlText + DockPaneStripGradient2.InactiveTabGradient = TabGradient10 + DockPaneStripSkin2.DocumentGradient = DockPaneStripGradient2 + DockPaneStripSkin2.TextFont = New System.Drawing.Font("Segoe UI", 9.0!) + TabGradient11.EndColor = System.Drawing.SystemColors.ActiveCaption + TabGradient11.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical + TabGradient11.StartColor = System.Drawing.SystemColors.GradientActiveCaption + TabGradient11.TextColor = System.Drawing.SystemColors.ActiveCaptionText + DockPaneStripToolWindowGradient2.ActiveCaptionGradient = TabGradient11 + TabGradient12.EndColor = System.Drawing.SystemColors.Control + TabGradient12.StartColor = System.Drawing.SystemColors.Control + TabGradient12.TextColor = System.Drawing.SystemColors.ControlText + DockPaneStripToolWindowGradient2.ActiveTabGradient = TabGradient12 + DockPanelGradient6.EndColor = System.Drawing.SystemColors.ControlLight + DockPanelGradient6.StartColor = System.Drawing.SystemColors.ControlLight + DockPaneStripToolWindowGradient2.DockStripGradient = DockPanelGradient6 + TabGradient13.EndColor = System.Drawing.SystemColors.GradientInactiveCaption + TabGradient13.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical + TabGradient13.StartColor = System.Drawing.SystemColors.GradientInactiveCaption + TabGradient13.TextColor = System.Drawing.SystemColors.ControlText + DockPaneStripToolWindowGradient2.InactiveCaptionGradient = TabGradient13 + TabGradient14.EndColor = System.Drawing.Color.Transparent + TabGradient14.StartColor = System.Drawing.Color.Transparent + TabGradient14.TextColor = System.Drawing.SystemColors.ControlDarkDark + DockPaneStripToolWindowGradient2.InactiveTabGradient = TabGradient14 + DockPaneStripSkin2.ToolWindowGradient = DockPaneStripToolWindowGradient2 + DockPanelSkin2.DockPaneStripSkin = DockPaneStripSkin2 + Me.pnlDock.Skin = DockPanelSkin2 Me.pnlDock.TabIndex = 13 ' 'msMain @@ -196,7 +200,7 @@ Partial Class frmMain Me.msMain.Location = New System.Drawing.Point(3, 0) Me.msMain.Name = "msMain" Me.msMain.Padding = New System.Windows.Forms.Padding(2, 2, 0, 2) - Me.msMain.Size = New System.Drawing.Size(274, 24) + Me.msMain.Size = New System.Drawing.Size(182, 24) Me.msMain.Stretch = False Me.msMain.TabIndex = 16 Me.msMain.Text = "Main Toolbar" @@ -213,7 +217,7 @@ Partial Class frmMain Me.mMenFileNewConnection.Image = Global.mRemoteNG.My.Resources.Resources.Connection_Add Me.mMenFileNewConnection.Name = "mMenFileNewConnection" Me.mMenFileNewConnection.ShortcutKeys = CType((System.Windows.Forms.Keys.Shift Or System.Windows.Forms.Keys.F4), System.Windows.Forms.Keys) - Me.mMenFileNewConnection.Size = New System.Drawing.Size(334, 22) + Me.mMenFileNewConnection.Size = New System.Drawing.Size(281, 22) Me.mMenFileNewConnection.Text = "New Connection" ' 'mMenFileNewFolder @@ -221,20 +225,20 @@ Partial Class frmMain Me.mMenFileNewFolder.Image = Global.mRemoteNG.My.Resources.Resources.Folder_Add Me.mMenFileNewFolder.Name = "mMenFileNewFolder" Me.mMenFileNewFolder.ShortcutKeys = System.Windows.Forms.Keys.F7 - Me.mMenFileNewFolder.Size = New System.Drawing.Size(334, 22) + Me.mMenFileNewFolder.Size = New System.Drawing.Size(281, 22) Me.mMenFileNewFolder.Text = "New Folder" ' 'mMenFileSep1 ' Me.mMenFileSep1.Name = "mMenFileSep1" - Me.mMenFileSep1.Size = New System.Drawing.Size(331, 6) + Me.mMenFileSep1.Size = New System.Drawing.Size(278, 6) ' 'mMenFileNew ' Me.mMenFileNew.Image = Global.mRemoteNG.My.Resources.Resources.Connections_New Me.mMenFileNew.Name = "mMenFileNew" Me.mMenFileNew.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.N), System.Windows.Forms.Keys) - Me.mMenFileNew.Size = New System.Drawing.Size(334, 22) + Me.mMenFileNew.Size = New System.Drawing.Size(281, 22) Me.mMenFileNew.Text = "New Connection File" ' 'mMenFileLoad @@ -242,7 +246,7 @@ Partial Class frmMain Me.mMenFileLoad.Image = Global.mRemoteNG.My.Resources.Resources.Connections_Load Me.mMenFileLoad.Name = "mMenFileLoad" Me.mMenFileLoad.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) - Me.mMenFileLoad.Size = New System.Drawing.Size(334, 22) + Me.mMenFileLoad.Size = New System.Drawing.Size(281, 22) Me.mMenFileLoad.Text = "Open Connection File..." ' 'mMenFileSave @@ -250,7 +254,7 @@ Partial Class frmMain Me.mMenFileSave.Image = Global.mRemoteNG.My.Resources.Resources.Connections_Save Me.mMenFileSave.Name = "mMenFileSave" Me.mMenFileSave.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) - Me.mMenFileSave.Size = New System.Drawing.Size(334, 22) + Me.mMenFileSave.Size = New System.Drawing.Size(281, 22) Me.mMenFileSave.Text = "Save Connection File" ' 'mMenFileSaveAs @@ -258,20 +262,20 @@ Partial Class frmMain Me.mMenFileSaveAs.Image = Global.mRemoteNG.My.Resources.Resources.Connections_SaveAs Me.mMenFileSaveAs.Name = "mMenFileSaveAs" Me.mMenFileSaveAs.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Shift) _ - Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) - Me.mMenFileSaveAs.Size = New System.Drawing.Size(334, 22) + Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) + Me.mMenFileSaveAs.Size = New System.Drawing.Size(281, 22) Me.mMenFileSaveAs.Text = "Save Connection File As..." ' 'mMenFileSep2 ' Me.mMenFileSep2.Name = "mMenFileSep2" - Me.mMenFileSep2.Size = New System.Drawing.Size(331, 6) + Me.mMenFileSep2.Size = New System.Drawing.Size(278, 6) ' 'mMenFileImportExport ' Me.mMenFileImportExport.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ImportFromXMLFileToolStripMenuItem, Me.ImportFromRDPFileToolStripMenuItem, Me.ImportFromActiveDirectoryToolStripMenuItem, Me.ImportFromPortScanToolStripMenuItem, Me.ToolStripSeparator6, Me.ExportToXMLFileToolStripMenuItem}) Me.mMenFileImportExport.Name = "mMenFileImportExport" - Me.mMenFileImportExport.Size = New System.Drawing.Size(334, 22) + Me.mMenFileImportExport.Size = New System.Drawing.Size(281, 22) Me.mMenFileImportExport.Text = "Import/Export Folder" Me.mMenFileImportExport.Visible = False ' @@ -313,41 +317,41 @@ Partial Class frmMain 'mMenFileSep3 ' Me.mMenFileSep3.Name = "mMenFileSep3" - Me.mMenFileSep3.Size = New System.Drawing.Size(331, 6) + Me.mMenFileSep3.Size = New System.Drawing.Size(278, 6) Me.mMenFileSep3.Visible = False ' 'mMenFileDelete ' Me.mMenFileDelete.Image = Global.mRemoteNG.My.Resources.Resources.Delete Me.mMenFileDelete.Name = "mMenFileDelete" - Me.mMenFileDelete.Size = New System.Drawing.Size(334, 22) + Me.mMenFileDelete.Size = New System.Drawing.Size(281, 22) Me.mMenFileDelete.Text = "Delete..." ' 'mMenFileRename ' Me.mMenFileRename.Image = Global.mRemoteNG.My.Resources.Resources.Rename Me.mMenFileRename.Name = "mMenFileRename" - Me.mMenFileRename.Size = New System.Drawing.Size(334, 22) + Me.mMenFileRename.Size = New System.Drawing.Size(281, 22) Me.mMenFileRename.Text = "Rename" ' 'mMenFileDuplicate ' Me.mMenFileDuplicate.Image = Global.mRemoteNG.My.Resources.Resources.Connection_Duplicate Me.mMenFileDuplicate.Name = "mMenFileDuplicate" - Me.mMenFileDuplicate.Size = New System.Drawing.Size(334, 22) + Me.mMenFileDuplicate.Size = New System.Drawing.Size(281, 22) Me.mMenFileDuplicate.Text = "Duplicate" ' 'mMenFileSep4 ' Me.mMenFileSep4.Name = "mMenFileSep4" - Me.mMenFileSep4.Size = New System.Drawing.Size(331, 6) + Me.mMenFileSep4.Size = New System.Drawing.Size(278, 6) ' 'mMenFileExit ' Me.mMenFileExit.Image = Global.mRemoteNG.My.Resources.Resources.Quit Me.mMenFileExit.Name = "mMenFileExit" Me.mMenFileExit.ShortcutKeys = CType((System.Windows.Forms.Keys.Alt Or System.Windows.Forms.Keys.F4), System.Windows.Forms.Keys) - Me.mMenFileExit.Size = New System.Drawing.Size(334, 22) + Me.mMenFileExit.Size = New System.Drawing.Size(281, 22) Me.mMenFileExit.Text = "Exit" ' 'mMenView @@ -436,24 +440,24 @@ Partial Class frmMain ' Me.mMenViewJumpToConnectionsConfig.Name = "mMenViewJumpToConnectionsConfig" Me.mMenViewJumpToConnectionsConfig.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ - Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys) - Me.mMenViewJumpToConnectionsConfig.Size = New System.Drawing.Size(262, 22) + Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys) + Me.mMenViewJumpToConnectionsConfig.Size = New System.Drawing.Size(260, 22) Me.mMenViewJumpToConnectionsConfig.Text = "Connections && Config" ' 'mMenViewJumpToSessionsScreenshots ' Me.mMenViewJumpToSessionsScreenshots.Name = "mMenViewJumpToSessionsScreenshots" Me.mMenViewJumpToSessionsScreenshots.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ - Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) - Me.mMenViewJumpToSessionsScreenshots.Size = New System.Drawing.Size(262, 22) + Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) + Me.mMenViewJumpToSessionsScreenshots.Size = New System.Drawing.Size(260, 22) Me.mMenViewJumpToSessionsScreenshots.Text = "Sessions && Screenshots" ' 'mMenViewJumpToErrorsInfos ' Me.mMenViewJumpToErrorsInfos.Name = "mMenViewJumpToErrorsInfos" Me.mMenViewJumpToErrorsInfos.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ - Or System.Windows.Forms.Keys.E), System.Windows.Forms.Keys) - Me.mMenViewJumpToErrorsInfos.Size = New System.Drawing.Size(262, 22) + Or System.Windows.Forms.Keys.E), System.Windows.Forms.Keys) + Me.mMenViewJumpToErrorsInfos.Size = New System.Drawing.Size(260, 22) Me.mMenViewJumpToErrorsInfos.Text = "Errors && Infos" ' 'mMenViewResetLayout @@ -643,6 +647,7 @@ Partial Class frmMain ' Me.cmbQuickConnect.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend Me.cmbQuickConnect.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems + Me.cmbQuickConnect.Margin = New System.Windows.Forms.Padding(1, 0, 3, 0) Me.cmbQuickConnect.Name = "cmbQuickConnect" Me.cmbQuickConnect.Size = New System.Drawing.Size(200, 25) ' @@ -657,7 +662,7 @@ Partial Class frmMain ' Me.tsContainer.ContentPanel.Controls.Add(Me.pnlDock) Me.tsContainer.ContentPanel.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional - Me.tsContainer.ContentPanel.Size = New System.Drawing.Size(842, 424) + Me.tsContainer.ContentPanel.Size = New System.Drawing.Size(842, 449) Me.tsContainer.Dock = System.Windows.Forms.DockStyle.Fill ' 'tsContainer.LeftToolStripPanel @@ -681,14 +686,58 @@ Partial Class frmMain Me.tsContainer.TopToolStripPanel.Controls.Add(Me.ToolStrip1) Me.tsContainer.TopToolStripPanel.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional ' - 'tsExtAppsToolbar + 'tsQuickConnect + ' + Me.tsQuickConnect.Dock = System.Windows.Forms.DockStyle.None + Me.tsQuickConnect.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.lblQuickConnect, Me.cmbQuickConnect, Me.btnQuickConnect, Me.btnConnections}) + Me.tsQuickConnect.Location = New System.Drawing.Point(3, 24) + Me.tsQuickConnect.MaximumSize = New System.Drawing.Size(0, 25) + Me.tsQuickConnect.Name = "tsQuickConnect" + Me.tsQuickConnect.Size = New System.Drawing.Size(418, 25) + Me.tsQuickConnect.TabIndex = 18 + ' + 'btnQuickConnect + ' + Me.btnQuickConnect.DropDown = Me.mnuQuickConnectProtocol + Me.btnQuickConnect.Image = Global.mRemoteNG.My.Resources.Resources.Play_Quick + Me.btnQuickConnect.ImageTransparentColor = System.Drawing.Color.Magenta + Me.btnQuickConnect.Margin = New System.Windows.Forms.Padding(0, 1, 3, 2) + Me.btnQuickConnect.Name = "btnQuickConnect" + Me.btnQuickConnect.Size = New System.Drawing.Size(84, 22) + Me.btnQuickConnect.Text = "Connect" + ' + 'mnuQuickConnectProtocol + ' + Me.mnuQuickConnectProtocol.Name = "mnuQuickConnectProtocol" + Me.mnuQuickConnectProtocol.OwnerItem = Me.btnQuickConnect + Me.mnuQuickConnectProtocol.ShowCheckMargin = True + Me.mnuQuickConnectProtocol.ShowImageMargin = False + Me.mnuQuickConnectProtocol.Size = New System.Drawing.Size(61, 4) + ' + 'btnConnections + ' + Me.btnConnections.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.btnConnections.DropDown = Me.mnuConnections + Me.btnConnections.Image = Global.mRemoteNG.My.Resources.Resources.Root + Me.btnConnections.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None + Me.btnConnections.ImageTransparentColor = System.Drawing.Color.Magenta + Me.btnConnections.Name = "btnConnections" + Me.btnConnections.Size = New System.Drawing.Size(29, 22) + Me.btnConnections.Text = "Connections" + ' + 'mnuConnections + ' + Me.mnuConnections.Name = "mnuConnections" + Me.mnuConnections.Size = New System.Drawing.Size(61, 4) + ' + 'tsExternalTools ' Me.tsExternalTools.ContextMenuStrip = Me.cMenExtAppsToolbar Me.tsExternalTools.Dock = System.Windows.Forms.DockStyle.None Me.tsExternalTools.Location = New System.Drawing.Point(39, 49) - Me.tsExternalTools.Name = "tsExtAppsToolbar" - Me.tsExternalTools.Size = New System.Drawing.Size(111, 25) Me.tsExternalTools.MaximumSize = New System.Drawing.Size(0, 25) + Me.tsExternalTools.Name = "tsExternalTools" + Me.tsExternalTools.Size = New System.Drawing.Size(111, 25) Me.tsExternalTools.TabIndex = 17 ' 'cMenExtAppsToolbar @@ -705,44 +754,14 @@ Partial Class frmMain Me.cMenToolbarShowText.Size = New System.Drawing.Size(128, 22) Me.cMenToolbarShowText.Text = "Show Text" ' - 'tsQuickConnect - ' - Me.tsQuickConnect.Dock = System.Windows.Forms.DockStyle.None - Me.tsQuickConnect.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.lblQuickConnect, Me.cmbQuickConnect, Me.btnQuickyPlay, Me.mMenQuickyCon}) - Me.tsQuickConnect.Location = New System.Drawing.Point(3, 24) - Me.tsQuickConnect.Name = "tsQuickConnect" - Me.tsQuickConnect.Size = New System.Drawing.Size(331, 25) - Me.tsQuickConnect.MaximumSize = New System.Drawing.Size(0, 25) - Me.tsQuickConnect.TabIndex = 18 - ' - 'btnQuickyPlay - ' - Me.btnQuickyPlay.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.btnQuickyPlay.Image = Global.mRemoteNG.My.Resources.Resources.Play_Quick - Me.btnQuickyPlay.ImageTransparentColor = System.Drawing.Color.Magenta - Me.btnQuickyPlay.Name = "btnQuickyPlay" - Me.btnQuickyPlay.Size = New System.Drawing.Size(32, 22) - Me.btnQuickyPlay.Text = "Connect" - ' - 'mMenQuickyCon - ' - Me.mMenQuickyCon.AutoSize = False - Me.mMenQuickyCon.AutoToolTip = True - Me.mMenQuickyCon.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.mMenQuickyCon.Image = Global.mRemoteNG.My.Resources.Resources.Root - Me.mMenQuickyCon.ImageTransparentColor = System.Drawing.Color.Magenta - Me.mMenQuickyCon.Name = "mMenQuickyCon" - Me.mMenQuickyCon.Size = New System.Drawing.Size(30, 22) - Me.mMenQuickyCon.Text = "Connections" - ' 'ToolStrip1 ' Me.ToolStrip1.Dock = System.Windows.Forms.DockStyle.None Me.ToolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripButton1, Me.ToolStripButton2, Me.ToolStripButton3, Me.ToolStripSplitButton1}) Me.ToolStrip1.Location = New System.Drawing.Point(3, 74) - Me.ToolStrip1.Name = "ToolStrip1" - Me.ToolStrip1.Size = New System.Drawing.Size(264, 25) Me.ToolStrip1.MaximumSize = New System.Drawing.Size(0, 25) + Me.ToolStrip1.Name = "ToolStrip1" + Me.ToolStrip1.Size = New System.Drawing.Size(0, 25) Me.ToolStrip1.TabIndex = 19 Me.ToolStrip1.Visible = False ' @@ -805,7 +824,7 @@ Partial Class frmMain Me.Icon = Global.mRemoteNG.My.Resources.Resources.mRemote_Icon Me.MainMenuStrip = Me.msMain Me.Name = "frmMain" - Me.Opacity = 0 + Me.Opacity = 0.0R Me.Text = "mRemoteNG" Me.msMain.ResumeLayout(False) Me.msMain.PerformLayout() @@ -814,9 +833,9 @@ Partial Class frmMain Me.tsContainer.TopToolStripPanel.PerformLayout() Me.tsContainer.ResumeLayout(False) Me.tsContainer.PerformLayout() - Me.cMenExtAppsToolbar.ResumeLayout(False) Me.tsQuickConnect.ResumeLayout(False) Me.tsQuickConnect.PerformLayout() + Me.cMenExtAppsToolbar.ResumeLayout(False) Me.ToolStrip1.ResumeLayout(False) Me.ToolStrip1.PerformLayout() Me.ResumeLayout(False) @@ -849,7 +868,7 @@ Partial Class frmMain Friend WithEvents mMenViewErrorsAndInfos As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mMenViewScreenshotManager As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mMenViewAddConnectionPanel As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents cmbQuickConnect As System.Windows.Forms.ToolStripComboBox + Friend WithEvents cmbQuickConnect As Controls.QuickConnectComboBox Friend WithEvents mMenViewSep2 As System.Windows.Forms.ToolStripSeparator Friend WithEvents mMenViewFullscreen As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mMenToolsSSHTransfer As System.Windows.Forms.ToolStripMenuItem @@ -866,8 +885,7 @@ Partial Class frmMain Friend WithEvents mMenSep3 As System.Windows.Forms.ToolStripSeparator Friend WithEvents mMenInfoDonate As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mMenViewSep3 As System.Windows.Forms.ToolStripSeparator - Friend WithEvents btnQuickyPlay As System.Windows.Forms.ToolStripSplitButton - Friend WithEvents mMenQuickyCon As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents btnQuickConnect As Controls.ToolStripSplitButton Friend WithEvents mMenViewJumpTo As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mMenViewJumpToConnectionsConfig As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mMenViewJumpToSessionsScreenshots As System.Windows.Forms.ToolStripMenuItem @@ -904,5 +922,8 @@ Partial Class frmMain Friend WithEvents ToolStripSplitButton1 As System.Windows.Forms.ToolStripDropDownButton Friend WithEvents ToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem Friend WithEvents ToolStripMenuItem2 As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mnuQuickConnectProtocol As System.Windows.Forms.ContextMenuStrip + Friend WithEvents btnConnections As System.Windows.Forms.ToolStripDropDownButton + Friend WithEvents mnuConnections As System.Windows.Forms.ContextMenuStrip End Class diff --git a/mRemoteV1/Forms/frmMain.resx b/mRemoteV1/Forms/frmMain.resx index 96cd7b9c..e4c99dcb 100644 --- a/mRemoteV1/Forms/frmMain.resx +++ b/mRemoteV1/Forms/frmMain.resx @@ -118,168 +118,174 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 17, 17 + 150, 17 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA - Cv8BNGKaggAAArhJREFUOE91U91LU3EYnt0GjUYSgv+EoDeCgXkhiuBAL7swoTWUEryYF2JXQlebTIlK - pA1bmfODND+DpqUzt5Vfm7NtZx9n52xnui9zm/m5p9/vlINcHnjhnPf83ud5n/d9fhIAkv9FQ0NDrU6n - 29fr9cnS0tKqq87lFQ8MDNxqaWm5oVKpjPFEEql0Gp2dnYb29vbrGo3m9mWgHIDBYGh7PzmZ1en1gtE4 - kgoLEYTCAmLxOE5OTzExMXHw2mAQTCZT9vmLF8oLIBFAJpNde/N2iGP5EOKJhBh70SjYIAchEsHu3h4O - UimkMxkcHZ9geHjY/w8A/airq9MGSAHj88EfYGGzfcOXpWWsra/DS3LJ/X0xMoeHqK6ufpoHoO3tXfOR - QueOC7OzcyKI3e44D3L8OS1aWFxEZPdPJ5qeHksOQKlU1mq12qjL7T5jvD5YrTaEQmEQvaxUKpUXFhbe - m5ufj8aILNoVnYuHYc76+vqi5eXlVZLKyruqSDSGHZcbm3YHls0rYBgf6uvlTy5YHigU/R7GC/PKKplL - EH6WJcNNoKLiTpukrKzsEcfz2Hb+wMbmFpaWzYjG4lCr1R8vAF7pdN/pVqamZ2DfdiLAEpBAACUlJQoJ - eaRNTU3TZHUC0Yv1jU1xWOPj4xgaevfTaDQejIyOituw2mzw+gPQDw7ytIbW5nxAnPcsnTkET/R/Mi2I - a9wikhyEkSWMH6am4HDukPaDqKmpUedtobu7W/h1fIxEMgm3xwOLxYqVVQu+/g0LYafgQeKVrq6uUB6A - qqPDTJLURFnivmxYEES9lJX6gzBnibHOw5FdtLa2fs4DoHoaGxvHioqK7hcXFz8mXRzRdqkfGK83RfIP - SV4hl8vH6Nk8gMuX5GV/v4sn2+E4Ds3NzTnGKy/T5R8FBQUyMukZGuT95lXX+Tf6O+vwZDVeqgAAAABJ - RU5ErkJggg== + Cv8BNGKaggAAArZJREFUOE9tUttLk3EYnt0GjUYSgv+EoDeCgXkhiuBAL7swoTWUEryYF2JXQlebTIlK + pA1bmfNAmsegaenMbeVpc7bt2+Hbt+2b7mRuM497+v2+2kC3Dx6+Hy/v+zzv4REBKIimpqZ6jUZzqNVq + E+Xl5TWFcijyAkNDQ3fa2tpuKRQKfSyeQDKVQnd3t66zs/OmSqW6ez0/99DpdB0fp6czGq2W1+vHkiE+ + jGCIRzQWw9n5Oaampo7e6nS8wWDIvHz1Sn6FQCKR3Hj3foRjA0HE4nEBB5EIWD8HPhzG/sEBjpJJpNJp + nJyeYXR01HuFgKKhoUHtIwWMxwOvj4XF8gPfVlaxsbkJN4klDg8FpI+PUVtb+zyPQN3fv+EhhfY9B+bn + FwQSq9V26ecCl7RoaXkZ4f1/naj6+kw5ArlcXq9WqyMOp/OCcXtgNlsQDIZA5mXFYrG0uLj4wcLiYiRK + xqJd0b24GOZiYGAgUllZWSOqrr6vCEei2HM4sW21YdW4BobxoLFR+iyr8kgmG3QxbhjX1sle/PCyLFlu + HFVV9zpEFRUVT7hAALv2X9ja3sHKqhGRaAxKpfJzluCNRvOTXmVmdg7WXTt8LCHx+VBWViYTkU/c0tIy + S07Hk3mxubUtLGtychIjIx9+6/X6o7HxceEaZosFbq8P2uHhAK2htbklEue9SKWPESDzfzEsCWfcISPZ + iCJLFD/NzMBm3yPt+1FXV6fM1uUIent7+T+np4gnEnC6XDCZzFhbN+H7f5iIOiX3E6/09PQE8wgUXV1G + 8qcmyhD3ZUI8L8xLVak/iHKGGOsyFN5He3v712xdjoDO09zcPFFSUvKwtLT0KenihLZL/cC43UkSf0zi + MqlUOkFz8wiu4/XgoCNArsNxHFpbW3OK11EwSFFUVCQhm56jIO/bhXIAiP4C+jvr8GtZ3d4AAAAASUVO + RK5CYII= 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 + KQD5F90VJ4irTWosAAAAAElFTkSuQmCC iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAjpJREFUOE+lk91P - UnEYx/2numu9bF21Vps1ZxfRGjEXtVrLpcNMROcxiRc9CgoSkQUKJSWKJmEFo2TKW241nbWaxcsAzwGO - HK/69jvngkBYXXjx3X5vz+f57nmeXxOApsNIDLZ5ohrrq1h6zBVhtY4GspOzKtHOCGt2R3RCrAiwzsUy - 2Vzud4njwO3x/1SuxCPDFGF8EWUqACFzscRhbH4Hmvk4lAszsK3TcCb6YY+rMBpQ49ojE+5YguiwfEa2 - yGPUFWMrAB2xLWQ2LuyAWlyCbY3G9Kd2mNfaYFyVYjwsh9rXB/nEMyisX5BhGwCKBDCx+BNK7xQcJOt4 - WIbhD5egDlwE9b4V2sBtXB55iO4nm0izZeIgWuuAJQDz0i/0eGx4HOmGPiQB9a4FvSvNuP+mGZT/BiT6 - B+h9uoUUs1cPYDgeltdJUB4v6MAgdCEplCvnoVg+hx5/K+697ITcMIV+xzZSuw0c7JLqWn0p0N4EOp1W - UHO3MOSXgfJdQZfrOq7Sw8R+CIMzX+sBQu/zpLI2f1qEjHjiuKuSYEB7CpT6JJR9LVDZP0I7+x3q59+Q - POhAAOQKPBTOs+iYPoN2+2mYuo5gw3oBCSL3wHG0mU5ANn4MUsPReoDGvs7mCSCw/bai0IYb4dVJJNw3 - EdxcrrlL5sugnVVd0IqAcs2jatjBdTLP1wIMrsiPPFNAgRSywO2DFcWDJXumTvvIiqMc+zvKk+7okGk2 - FhSGQ7D2P5F/wJIYfWWUD/Od/wAx6RUqGJsn2QAAAABJRU5ErkJggg== + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAi9JREFUOE+lk+9P + UlEYx/2netf6sfmqtdqsOXsRrRFzUas1XTrMRHRek/ihVwFBupEFCiUliiZhBaNkChdyq+ms1Sx+DPBe + 4Mr1Vd8OvKAYzLZ68Tnb2Tnn8zznOc9pAvBfVAabJ6phXrCpCVeE1zoaYK+FdkZ4izuiqwqYeTadyWZ/ + FgUBwr54KNmiiDRXgPFZlKsKypELRQETC7vQLMSgXJyFbYOGMz4Ie0yF8YAaVx+Y0WENosv6EZmCiHEX + y1cFOpJm2W5c3AW1tAzbOo2ZD52wrLfDuCaFKSyH2jcA+eQTKJhPSPMNBAUimFz6DqV3Gg4S1RSWYfTd + RagDF0C9bYM2cAuXxu6j99EWUnyJCKK1Ap4ILMs/0Oex4WGkF/qQBNSbVvSvtuDuqxZQ/uuQ6O+h//E2 + ktx+vYATRFhfJkB5vKADw9CFpFCunoNi5Sz6/G2487wbcsM0Bh07SO41yGCPVJfxJUF74+h2MqDmb2LE + LwPlu4we1zVcoUdJ+iEMz36uF5TfOkcqa/OnKpIxTwy3VRIMaZtBqU9COdAKlf09tHNfoX76BYlGgmxe + hMJ5Bl0zp9FpPwVzzxFsMucRJ7iHjqPdfAIy0zFIDUfrBRr7Bp8jgsDO6yqhTTfCa1OIu28guLVSs5bI + lUA7/8ygIijVbDqMRE6sFRhckW85Lo88KWReOABfQQRP5lwdB8hUWpn93cpT7uiIeY4Nlu9VNv8N8g94 + ckZfFfw7aPoFMekVKhSu/5wAAAAASUVORK5CYII= iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAmlJREFUOE+lVN1L - k1EcPv9Ft06mzOF0m27qdHOb040cRpubc3PEyKQhTktbVuJAWkUKUr5FkWXSh5pObKTmJK1WYFdjBnVR - 7MXogwIvkurCi552DpwoCBK8eC6f3/PFOQQA2Q3IjVv3ri6vJrdXn61h5ekaEo+fYz7xBPcXHmE6voQ7 - M/MYm5jDlZvTuHjtLgYvjSM6PIq+s8J2e3d/iGTJP1/u24t3sT0wzxnw6s3Gf/H67QY+fdlE6NTgCFlN - vsDX5Yf48V7Agw9xfPy8uSNsffuO4PEzAqGWVSoV1Go1SkpKUFpaCo1GA61Wi7KyMlRUVKCyshJVVVXQ - 6/Worq6GyWRCTU0NWrsiAllaSTJSTk4OJBIJcnNzIZVKkZeXh/z8fMhkMsjlchQWFkKhUKC4uJgJ1tXV - oTsyLBBaGD+QSqUwOTm54wPZDgQSX1xhNrliJpNBT0/PP1VpTB6xvr4eh8NRgczEEyxbQUEB0uk0YrEY - ioqKflvlJN5JeXk5dDodGhoacLCzXyATswswm82MoFQqWT5eJiVRcBItk4pROBwOHGjvFcj4VBxWq/Uv - Em+fKvEFDAYDW8BoNLIVXC4XfG3dAhm9PQuah6rQLijpz8n4bNQlhcViQW1tLZqamuAOhARyeWyK5eHW - uBJVoQS6NyfR6ShsNhu8Xi+c/qBAzo9c36J5nE4nGhsbmTW3280UKDweD5qbmxnB5/OhpaWFwe/3w+4O - DJHO3oHOvuiF9b7oiBgeGBaP9g+JHSfOicFjp8VDXREx0HFS9AfDorf1iJi1LGZVxf3eNtHuCqxb7C7j - rp4y/QZ+AXhAQe1Sf9VzAAAAAElFTkSuQmCC + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAmFJREFUOE+lk91L + 01Ecxs9/0e0UFTecU6fzZbp3N8mxyLnNbY4YmTTEl9oyK1GQVpGClKcoskx6UdOJjdScpNUK7EpmUBeF + P4xeKPAiqS686GnnwIEiIaGL5/JznpcvhwD4L5Ebt+5dXVxObi8/W8HS0xUkHj/HbOIJ7s89wmR8AXem + ZjEyNoMrNydx8dpd9F8aRXRwGN1n6XZLuKeNpOGfL/ftxbvYHphmdHj1ZuOfev12A5++bKLtVP8QWU6+ + wNfFh/jxnuLBhzg+ft7clba+fUfo+BlKWOTCwkIUFRVBrVajuLgYJSUl0Gg0KC0tRXl5ObRaLSorK1FV + VQW9Xg+j0Qiz2Yymjl5KFpaSHJLJZMjIyEBmZiaysrKQnZ2NnJwc5ObmQqFQIC8vD0qlEiqVihtarVaE + ewcpYYOJB1ZXVzE+Pr7rB9IbUBKfX+IxBbC+vo5IJLIjxGqKirW1tTjcGaVkKp7g3eRyOVKpFGKxGPLz + 8/+CxCZlZWWoqKiAw+HAwfYeSsam52AymThQUFDAITEmg5gExMZkZkx1dXU40NJFyehEHDab7Q9IrC8g + dgGdTscvYDAY+BVcLhf8zWFKhm9P8z7MRUC/n0ycjaVkslgsqK6uhsfjgTvYRsnlkQneR0QTTgJi9xYQ + W56ppqYGPp8PzkCIkvND17dYH6fTifr6eh7N7XZzB6aGhgZ4vV4O+P1+NDY2cgUCAdjdwQHS3tXX3h29 + sNYdHZI6+waloz0DUuuJc1Lo2GnpUEevFGw9KQVCnZKv6YiUjiylXaX9vmbJ7gquWewuw45fdPcC+QV4 + QEHt2MS46QAAAABJRU5ErkJggg== iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAmlJREFUOE+lVN1L - k1EcPv9Ft06mzOF0m27qdHOb040cRpubc3PEyKQhTktbVuJAWkUKUr5FkWXSh5pObKTmJK1WYFdjBnVR - 7MXogwIvkurCi552DpwoCBK8eC6f3/PFOQQA2Q3IjVv3ri6vJrdXn61h5ekaEo+fYz7xBPcXHmE6voQ7 - M/MYm5jDlZvTuHjtLgYvjSM6PIq+s8J2e3d/iGTJP1/u24t3sT0wzxnw6s3Gf/H67QY+fdlE6NTgCFlN - vsDX5Yf48V7Agw9xfPy8uSNsffuO4PEzAqGWVSoV1Go1SkpKUFpaCo1GA61Wi7KyMlRUVKCyshJVVVXQ - 6/Worq6GyWRCTU0NWrsiAllaSTJSTk4OJBIJcnNzIZVKkZeXh/z8fMhkMsjlchQWFkKhUKC4uJgJ1tXV - oTsyLBBaGD+QSqUwOTm54wPZDgQSX1xhNrliJpNBT0/PP1VpTB6xvr4eh8NRgczEEyxbQUEB0uk0YrEY - ioqKflvlJN5JeXk5dDodGhoacLCzXyATswswm82MoFQqWT5eJiVRcBItk4pROBwOHGjvFcj4VBxWq/Uv - Em+fKvEFDAYDW8BoNLIVXC4XfG3dAhm9PQuah6rQLijpz8n4bNQlhcViQW1tLZqamuAOhARyeWyK5eHW - uBJVoQS6NyfR6ShsNhu8Xi+c/qBAzo9c36J5nE4nGhsbmTW3280UKDweD5qbmxnB5/OhpaWFwe/3w+4O - DJHO3oHOvuiF9b7oiBgeGBaP9g+JHSfOicFjp8VDXREx0HFS9AfDorf1iJi1LGZVxf3eNtHuCqxb7C7j - rp4y/QZ+AXhAQe1Sf9VzAAAAAElFTkSuQmCC + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAmFJREFUOE+lk91L + 01Ecxs9/0e0UFTecU6fzZbp3N8mxyLnNbY4YmTTEl9oyK1GQVpGClKcoskx6UdOJjdScpNUK7EpmUBeF + P4xeKPAiqS686GnnwIEiIaGL5/JznpcvhwD4L5Ebt+5dXVxObi8/W8HS0xUkHj/HbOIJ7s89wmR8AXem + ZjEyNoMrNydx8dpd9F8aRXRwGN1n6XZLuKeNpOGfL/ftxbvYHphmdHj1ZuOfev12A5++bKLtVP8QWU6+ + wNfFh/jxnuLBhzg+ft7clba+fUfo+BlKWOTCwkIUFRVBrVajuLgYJSUl0Gg0KC0tRXl5ObRaLSorK1FV + VQW9Xg+j0Qiz2Yymjl5KFpaSHJLJZMjIyEBmZiaysrKQnZ2NnJwc5ObmQqFQIC8vD0qlEiqVihtarVaE + ewcpYYOJB1ZXVzE+Pr7rB9IbUBKfX+IxBbC+vo5IJLIjxGqKirW1tTjcGaVkKp7g3eRyOVKpFGKxGPLz + 8/+CxCZlZWWoqKiAw+HAwfYeSsam52AymThQUFDAITEmg5gExMZkZkx1dXU40NJFyehEHDab7Q9IrC8g + dgGdTscvYDAY+BVcLhf8zWFKhm9P8z7MRUC/n0ycjaVkslgsqK6uhsfjgTvYRsnlkQneR0QTTgJi9xYQ + W56ppqYGPp8PzkCIkvND17dYH6fTifr6eh7N7XZzB6aGhgZ4vV4O+P1+NDY2cgUCAdjdwQHS3tXX3h29 + sNYdHZI6+waloz0DUuuJc1Lo2GnpUEevFGw9KQVCnZKv6YiUjiylXaX9vmbJ7gquWewuw45fdPcC+QV4 + QEHt2MS46QAAAABJRU5ErkJggg== iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAftJREFUOE+Vk81v - 0mAcx/lf/FuMGmOMJ08ePYvRg2RZllKgFAvEMrDYwg664BybMQw3KmpteTOpklVefINlyEDQ1dPioWbf - PeUwNW50Hppe+vn8vr/v89QFwOX0pNNptyRJLVEUrWQyaf35vSOcSqXcBNzr9/swTROJRILwv4c6Cgjc - 6vV6GA6HKBQKiMVi/ycQBMGyp9frdfA8r9rTI5EIOI5DKBSyHBOQyL86nQ7K5TKi0eircDisZbNZtNtt - MAwzXRCPx8+SyPuNRgO1Wg3FYhGyLENVVZRKJfj9/taRCW6vfOGDmY91EtmqVqvQdR32u1KpQNM0KIoC - n8+35/V63f8I2KVtXioMITwdgFt6D8MwkM/nwbLsvh2ZTLVomm5RFOW2+/hLwNjw+gDF+g/Ib01wqz3M - iAaCweDPQCBw6qj7cijwZ7b5JIGfETCjjHD/+Vfkat9BPdjCFdZ4fdxlmwjoxS1eWBtAfmNi8eUIibUd - pMgaq5Vv8Cx0cYluPjpWMEfg+dwAGzqBX4wwn9uBSJKslMa4le7iIvUuO+2quzwLHazru5PI/JM+7pHy - stoYN6UuLsxNhyclXrv7iey6C3GDNE/WWCbwDQKfm9187PSTTQRX73zQ7aKW1TEeKmNcT37GmZmTwYfH - eJlpNklROD+7idOek8O24AByavlRgSfdiAAAAABJRU5ErkJggg== + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgRJREFUOE+NkEtv + EmEUhue/+FuMGmOMK1cuXYvRhaRpmuE+lEscCoIz0IU2WEtrDKUtiIoMN5PRSZGLN2iKFAQtrhoXY/r2 + DAl2qJPaxfPN5JzzfN85hwHwX2KxmEkUxYYgCGokElH1ualCI6LRqInEg263i9FohFAoROHj/FSxESQ3 + Op0O+v0+0uk0AoEAhY/zU8VGhMNhVXtdURTwPJ/XYj6fDx6PB263WzWU9FDLf1qtForFIvx+/xuv1ysl + Egk0m004nc7TLwgGgxep5cNarYZKpYJsNotMJoN8Po9CoQC73d4wFOdXv/Gu+GeFWlbL5TJkWYb2LZVK + kCQJuVwONpvtwGKxmP6RueVdXkz3Ed7owbP8EdVqFalUChzHHWot06uq1WptsCxr0uqnZKcmb/aQVX4h + 834Ez1oHM0IVLpfrt8PhOKevnfD3xx7f5SMkvyAxnhvg0cvvSFZ+gn28gxtc9a1e0jM+rEs7fHi9h8y7 + EZZeDxBa30OUxlgr/YB5sY1r1vrTk+IEZo7khWQPWzLJrwZYSO5BoE5WC0Pci7Vxlf2QMBInMObFFjbl + /XHL/PMuHtLyEtIQd8U2rsydLmswtx58oVn3IWzR5mmMFZLvkHxpdvuZkXAS5ub9T7K2qJX8EE9yQ9yO + fMWFmbPJGuPjurNep0Xh8uw2zpvPLgNgjgByavlR+3PXTAAAAABJRU5ErkJggg== iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAq5JREFUOE+lk99P - UmEcxv1b9E9oreZq1Wrd1da46KILp+ZPoKnlahksZ+kwp1lSamY6FdTUORUFTgIiiCaKgCBwMJFfyoGB - cOCo2faELCGrdVEXn7v3+bx73vf7zQKQ9T/8FtaQhzlqxwFPZdsnFRsM/ckSp2VmmpwxRnlThr2cXy87 - JVDaGNasNeF3Bg6xucvA4aNTOHcSsHoTGFkM+ocWAqyfJWkBsR5nSU2x+Ba1j7UvYYjnPBCM2VA/soEu - YhM6axB2P40PCk+8i9hOS1ICyVo0e3I14tsMMFiwhVCbDHUSTnhCDNyhBMYWvagRmyBf9cPijqJ1kvQ1 - j9uzj7MpwehSkL/uiWPFGQF/0IKHPWtIHBwl+faDI9QOGlHTb8C8hYJ6nUKd2MRPC/rm/KQ92bWb2EJ1 - jwFV3SvwBBOYWvZCad4Bk5QpzT6w2zVonbLC5ArjUbeeTAs6ZC7G4YuBLzKi8r0enE5d8rAW03o3wvQB - dsMMemftKG1To/KdFlb3HjhCLZMWtIzbGbs3hscDRrA7tCh/q0HZGw1izFdsUzS4QjWKWhS4m4QrVMHi - iSC/SZkRPBObSfN2BEKJHZx2HcqE8yh5PYfil8oUhS8IFDbKUNAoRb14GXonhdt10kyFZB++TO+F1kqh - skOXDoai+6D2GOQJZlIUCiQgVt0QJevcqJnIPCJXuJBd/mret2SjIF/xgN2mQkGTHG3jhhTH4fyGCQyr - HFAZvbhePea7en80843Hj5EnmGXdaSDiGssOlCYfnouWUNIsRVHjNJ72aiHXu6BY8+Byxcf4xXtDpwfp - ZDRv8SWsm08m/X3EBj47AjC6QikWbbvokpiRyxH7z5eL/jzKJ5JrD0ZzrlSN8C5VDJMXuIN0LltMnysb - IM+W9vPOFPf9fZn+Za2/A9evBaJ0QokTAAAAAElFTkSuQmCC + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAqtJREFUOE+lk+1P + klEYxv1b9E9oreZq1Wp9q63xoQ99cGq+Ak0tV8tgOUuHOc2SUjPTqaCmzqko8CQggmiiCAgCDybypjww + EB541Gy7QpaQ1dpaH35n5z67r2u7zrlPFoD/4rcDDXmYo3Yc8FS2fVKxwdCfLHFaZqbJGWOUN2XYy/m1 + /1ShtDGsWWvC7wwcYnOXgcNHp3DuJGD1JjCyGPQPLQRYP2vSG2I9zpKaYvEtah9rX8IQz3kgGLOhfmQD + XcQmdNYg7H4aHxSeeBexnTZJLZK1aPbkasS3GWCwYAuhNinqJJzwhBi4QwmMLXpRIzZBvuqHxR1F6yTp + ax63Z6cNRpeC/HVPHCvOCPiDFjzsWUPi4CjJtx8coXbQiJp+A+YtFNTrFOrEJn7aoG/OT9qTWbuJLVT3 + GFDVvQJPMIGpZS+U5h0wSQOl2Qd2uwatU1aYXGE86taTaYMOmYtx+GLgi4yofK8Hp1OXbNZiWu9GmD7A + bphB76wdpW1qVL7TwureA0eoZdIGLeN2xu6N4fGAEewOLcrfalD2RoMY8xXbFA2uUI2iFgXuJuEKVbB4 + IshvUmYMnonNpHk7AqHEDk67DmXCeZS8nkPxS2WKwhcEChtlKGiUol68DL2Twu06aSZCMg9fpvdCa6VQ + 2aFLC0PRfVB7DPIEMykKBRIQq26IknFu1ExkLpErXMgufzXvW7JRkK94wG5ToaBJjrZxQ4pjcX7DBIZV + DqiMXlyvHvNdvT+aecZj8gSzrDsNRFxj2YHS5MNz0RJKmqUoapzG014t5HoXFGseXK74GL94b+j0IJ1w + iy9h3Xwy6e8jNvDZEYDRFUqxaNtFl8SMXI7Yf75c9OdRPuHag9GcK1UjvEsVw+QF7iCdyxbT58oGyLOl + /bwzxX1//0z/DrK+A9evBaLmuZREAAAAAElFTkSuQmCC iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA2ZJREFUOE9dk91P - k2cYxptsO5vZf8GxZvEAAzYUV6HQMcSImPEpbQPtCynNCmWx6ksXKlhGiRsTJypYsEApYItfLdBarBX6 - trUtLRRah26DbqzGCSxz8fLpm2imB7/kyp37/j0n18MBwPk/Da7qbMIIIUF4SfiHsEmYopxVeR/uvzsm - Cx8TrqcP7v1iwGLyLmaezMOyMo+JiB1jkSHUzZS/Et89MV0zXfrpWxErIEefEFwD0fPY2PZiZSuE4BYD - c8IHa3wJA6EQrvkZjPhd0HvaUW4uCZSNFH2Wvn0rMFyNtCP+Yg5LL9wIp8LwbfoxFAtjNL6Kbm8MnQ8j - 6HJ4YA7boXe3omRQMM0KyMtZhH/X/56DJWXF2HMrbm05cOtpCD9Hl/FDcAWU1QvqphuaBSv6Ehfg/d0M - 4SX+f/k/8orSApM1/hMW/7BiODUJ418eeJIB6HxhdC4sQ2zxQmKzQb7UB0Wchny1FYN+Pa4/1CL3++w7 - acH64z9vYmD9EnTJy+T1ENxJPxru+CCeXMQ3ngVIYkoIl8UQRkQoD8qgvqeAM2bAQW3mb2nB9urzGbRF - z4KKNaPv11kMJxZRfuMRZHYnOlduoyo6BG6gGXx/Pb6ylUE2ehLMsylk0vt3ONT9qp211AxOBRSQBbrR - /8SGimE3KiaCKLn4AA22B2gNmEG5LKg0mlFq/BaSwRNgnk5iv3rfLqd+tuKZb3MC3aE2dKzO4vS8HZXa - K6C1nejv74fyzHcoPGPCYXqCZA0707S3oXdIi8+b925ySDGmzJEeWOJX0XifRu05JfR6PTY2NrC2tgaH - w4FWTQcaT3cgHImyM5eL9IHs8Cpy1jnVlmN8UoxXwaQVVfrjUDQrwASDKKNaUFAohEgkQk9PD1QqFZsL - CgugVDewkiZF0zZbpNIbX07q5pSg1NWgNTQrqDM4kHOID7vdDoZh4HQ6YTKZkPsFDyqDmBXQNL3LCo5c - y99DihGoVh8F1ShlBZVUE3i5h8Dn81FcXMySzrxcHgRf52+nBRKJJPXuMx2+kLMnW5XpLDgmeN2l74Jx - bBTj4+Po7e2FXC5HS0sLm9Mz44gxpdPpUkKhMPLeV87IyPgoS3KgKa8ob6dGVPO6TlqHemk9cmTc1MHG - LIbkXalUultbW/tSIBAkuFzu3jfA3LOfi8khbAAAAABJRU5ErkJggg== + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA2BJREFUOE9dkt9P + Wmccxkm63bXZf+F1l6UXLloidlRRZp1Lnc38OYEoHA2SoriMdkcWqQ4rpqur3VyrRYuKqAW7tqBCsZQp + BxggKAqt7TalczRd1WZd+uw956Jpd/FJnnzzPp/35uEBeIsmT20uYYyQIjwnvCBsE2Yod03B/9+/WXyH + cI0t3HlownL6NuYeLMK2toipmBMTsRE0zFW+lN4+NVs3W37wLQEpvUvwDMW/xdauH2s7EYR3GFhTAdiT + KxiKRHA1yGAs6IHR14lKa1moYqzkvTcFpiuxTiSfLWDlmRfRTBSB7SBGElGMJ9fR60+g+34MPS4frFEn + jN52lA2LZjkBKecQ/tn8ewG2jB0TT+24uePCzUcR/BBfxXfhNVB2P6gbXuiW7BhIXYD/DyvEl4X/Fl4U + lLACiz35PZaf2DGamYb5Lx986RAMgSi6l1YhtfkhczigXBmAKklDud6O4aAR1+7rkX8+9xYr2Pz1zxsY + 2rwMQ/pH8nsE3nQQTbcCkE4v47RvCbKEGuJVKcQxCSrDCmjvqOBOmHBUn/07K9hdfzqHjvjXoBKtGPht + HqOpZVRe/wUKpxvdaz+jJj4CfqgVwmAjTjgqoBj/AszjGWTTR/Z41N2avY3MHL4KqaAI9WLwgQNVo15U + TYVRdukemhz30B6ygvLYUG22otz8JWTDp8A8msYR7fv7vMb5qseB7Sn0RjrQtT6PM4tOVOt/Aq3vxuDg + INRnv0HxWQuO01Mk67ibrrMD/SN6fNB6eJtHhjFjjfXBlryC5rs06s+pYTQasbW1hY2NDbhcLrTrutB8 + pgvRWJy7eTxkD+SNoCpvk1drOykkw3gZTttRY/wMqlYVmHAYFVQbiorFkEgk6Ovrg0aj4XJRcRHU2iZO + 0qJq2eWGVH7942nDghqUtha0juYEDSYX8o4J4XQ6wTAM3G43LBYL8j8SQGOScgKapvc5wSdXCw+RYYRq + tZ+CapZzgmqqBYL8YxAKhSgtLeVgsyBfANHnhbusQCaTZTgBy/ELeYdyNdnuopOiVz3GHpgnxjE5OYn+ + /n4olUq0tbVxmb2Zx8wZg8GQEYvFsdcClqysrAM5sg9bCkoK9uokda8a5A1olDciT8HPHG3OYUjel8vl + +/X19c9FIlGKz+cf/g/A3LOff0xp0AAAAABJRU5ErkJggg== - 521, 17 + 367, 17 - - 374, 17 + + 778, 17 - + 17, 56 + + 17, 17 + + + 504, 17 + - 184, 56 + 671, 17 - 252, 17 + 245, 17 155 diff --git a/mRemoteV1/Forms/frmMain.vb b/mRemoteV1/Forms/frmMain.vb index fd8f82b7..2e12a122 100644 --- a/mRemoteV1/Forms/frmMain.vb +++ b/mRemoteV1/Forms/frmMain.vb @@ -49,6 +49,7 @@ Public Class frmMain Startup.ParseCommandLineArgs() ApplyLanguage() + PopulateQuickConnectProtocolMenu() AddHandler ThemeManager.ThemeChanged, AddressOf ApplyThemes ApplyThemes() @@ -145,8 +146,8 @@ Public Class frmMain mMenInfoAnnouncements.Text = My.Language.strMenuAnnouncements lblQuickConnect.Text = My.Language.strLabelConnect - btnQuickyPlay.Text = My.Language.strMenuConnect - mMenQuickyCon.Text = My.Language.strMenuConnections + btnQuickConnect.Text = My.Language.strMenuConnect + btnConnections.Text = My.Language.strMenuConnections cMenToolbarShowText.Text = My.Language.strMenuShowText @@ -618,75 +619,67 @@ Public Class frmMain #End Region #Region "Quick Connect" - Private Sub btnQuickyPlay_ButtonClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnQuickyPlay.ButtonClick - CreateQuicky(QuickyText) - End Sub - - Private Sub btnQuickyPlay_DropDownOpening(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnQuickyPlay.DropDownOpening - CreateQuickyButtons() - End Sub - - Private Sub CreateQuickyButtons() + Private Sub PopulateQuickConnectProtocolMenu() Try - btnQuickyPlay.DropDownItems.Clear() - - For Each fI As FieldInfo In GetType(mRemoteNG.Connection.Protocol.Protocols).GetFields - If fI.Name <> "value__" And fI.Name <> "NONE" And fI.Name <> "IntApp" Then - Dim nBtn As New ToolStripMenuItem - nBtn.Text = fI.Name - btnQuickyPlay.DropDownItems.Add(nBtn) - AddHandler nBtn.Click, AddressOf QuickyProtocolButton_Click + mnuQuickConnectProtocol.Items.Clear() + For Each fieldInfo As FieldInfo In GetType(Connection.Protocol.Protocols).GetFields + If Not (fieldInfo.Name = "value__" Or fieldInfo.Name = "IntApp") Then + Dim menuItem As New ToolStripMenuItem(fieldInfo.Name) + If fieldInfo.Name = My.Settings.QuickConnectProtocol Then + menuItem.Checked = True + btnQuickConnect.Text = My.Settings.QuickConnectProtocol + End If + mnuQuickConnectProtocol.Items.Add(menuItem) End If Next Catch ex As Exception - MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "CreateButtons (frmMain) failed" & vbNewLine & ex.Message, True) + MessageCollector.AddExceptionMessage("PopulateQuickConnectProtocolMenu() failed.", ex, Messages.MessageClass.ErrorMsg, True) End Try End Sub - Private Sub QuickyProtocolButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Private Sub lblQuickConnect_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles lblQuickConnect.Click + cmbQuickConnect.Focus() + End Sub + + Private Sub cmbQuickConnect_ConnectRequested(ByVal sender As Object, ByVal e As Controls.QuickConnectComboBox.ConnectRequestedEventArgs) Handles cmbQuickConnect.ConnectRequested + btnQuickConnect_ButtonClick(sender, e) + End Sub + + Private Sub btnQuickConnect_ButtonClick(ByVal sender As Object, ByVal e As EventArgs) Handles btnQuickConnect.ButtonClick Try - Dim conI As Connection.Info = CreateQuicky(QuickyText, Tools.Misc.StringToEnum(GetType(mRemoteNG.Connection.Protocol.Protocols), sender.Text)) - - If conI.Port = 0 Then - conI.SetDefaultPort() - - If mRemoteNG.Connection.QuickConnect.History.Exists(conI.Hostname) = False Then - mRemoteNG.Connection.QuickConnect.History.Add(conI.Hostname) - End If - Else - If mRemoteNG.Connection.QuickConnect.History.Exists(conI.Hostname) = False Then - mRemoteNG.Connection.QuickConnect.History.Add(conI.Hostname & ":" & conI.Port) - End If + Dim connectionInfo As Connection.Info = CreateQuickConnect(cmbQuickConnect.Text.Trim(), Connection.Protocol.Converter.StringToProtocol(My.Settings.QuickConnectProtocol)) + If connectionInfo Is Nothing Then + cmbQuickConnect.Focus() + Return End If - App.Runtime.OpenConnection(conI, mRemoteNG.Connection.Info.Force.DoNotJump) + cmbQuickConnect.Add(connectionInfo) + + OpenConnection(connectionInfo, Connection.Info.Force.DoNotJump) Catch ex As Exception - MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "QuickyProtocolButton_Click (frmMain) failed" & vbNewLine & ex.Message, True) + MessageCollector.AddExceptionMessage("btnQuickConnect_ButtonClick() failed.", ex, Messages.MessageClass.ErrorMsg, True) End Try End Sub - Private Sub cmbQuickConnect_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles cmbQuickConnect.KeyDown - If e.KeyCode = Keys.Enter Then - CreateQuicky(QuickyText) - End If + Private Sub cmbQuickConnect_ProtocolChanged(ByVal sender As Object, ByVal e As Controls.QuickConnectComboBox.ProtocolChangedEventArgs) Handles cmbQuickConnect.ProtocolChanged + SetQuickConnectProtocol(Connection.Protocol.Converter.ProtocolToString(e.Protocol)) End Sub - Private Sub lblQuickConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblQuickConnect.Click - Me.cmbQuickConnect.Focus() + Private Sub btnQuickConnect_DropDownItemClicked(sender As System.Object, e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles btnQuickConnect.DropDownItemClicked + SetQuickConnectProtocol(e.ClickedItem.Text) End Sub - Private Function QuickyText() As String - Dim txt As String - - txt = cmbQuickConnect.Text - - If txt.StartsWith(" ") Or txt.EndsWith(" ") Then - txt = txt.Replace(" ", "") - cmbQuickConnect.Text = txt - End If - - Return txt - End Function + Private Sub SetQuickConnectProtocol(ByVal protocol As String) + My.Settings.QuickConnectProtocol = protocol + btnQuickConnect.Text = protocol + For Each menuItem As ToolStripMenuItem In mnuQuickConnectProtocol.Items + If menuItem.Text = protocol Then + menuItem.Checked = True + Else + menuItem.Checked = False + End If + Next + End Sub #End Region #Region "Info" @@ -721,43 +714,43 @@ Public Class frmMain #End Region #Region "Connections DropDown" - Private Sub mMenQuickyCon_DropDownOpening(ByVal sender As Object, ByVal e As System.EventArgs) Handles mMenQuickyCon.DropDownOpening - mMenQuickyCon.DropDownItems.Clear() + Private Sub btnConnections_DropDownOpening(ByVal sender As Object, ByVal e As EventArgs) Handles btnConnections.DropDownOpening + btnConnections.DropDownItems.Clear() - For Each tNode As TreeNode In App.Runtime.Windows.treeForm.tvConnections.Nodes - AddNodeToMenu(tNode.Nodes, mMenQuickyCon) + For Each treeNode As TreeNode In Windows.treeForm.tvConnections.Nodes + AddNodeToMenu(treeNode.Nodes, btnConnections) Next End Sub - Private Shared Sub AddNodeToMenu(ByVal tnc As TreeNodeCollection, ByVal menToolStrip As ToolStripMenuItem) + Private Shared Sub AddNodeToMenu(ByVal treeNodeCollection As TreeNodeCollection, ByVal toolStripMenuItem As ToolStripDropDownItem) Try - For Each tNode As TreeNode In tnc - Dim tMenItem As New ToolStripMenuItem() - tMenItem.Text = tNode.Text - tMenItem.Tag = tNode + For Each treeNode As TreeNode In treeNodeCollection + Dim menuItem As New ToolStripMenuItem() + menuItem.Text = treeNode.Text + menuItem.Tag = treeNode - If Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Container Then - tMenItem.Image = My.Resources.Folder - tMenItem.Tag = tNode.Tag + If Tree.Node.GetNodeType(treeNode) = Tree.Node.Type.Container Then + menuItem.Image = My.Resources.Folder + menuItem.Tag = treeNode.Tag - menToolStrip.DropDownItems.Add(tMenItem) - AddNodeToMenu(tNode.Nodes, tMenItem) - ElseIf Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Connection Or _ - Tree.Node.GetNodeType(tNode) = Tree.Node.Type.PuttySession Then - tMenItem.Image = Windows.treeForm.imgListTree.Images(tNode.ImageIndex) - tMenItem.Tag = tNode.Tag + toolStripMenuItem.DropDownItems.Add(menuItem) + AddNodeToMenu(treeNode.Nodes, menuItem) + ElseIf Tree.Node.GetNodeType(treeNode) = Tree.Node.Type.Connection Or _ + Tree.Node.GetNodeType(treeNode) = Tree.Node.Type.PuttySession Then + menuItem.Image = Windows.treeForm.imgListTree.Images(treeNode.ImageIndex) + menuItem.Tag = treeNode.Tag - menToolStrip.DropDownItems.Add(tMenItem) + toolStripMenuItem.DropDownItems.Add(menuItem) End If - AddHandler tMenItem.MouseUp, AddressOf ConMenItem_MouseUp + AddHandler menuItem.MouseUp, AddressOf ConnectionsMenuItem_MouseUp Next Catch ex As Exception - MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AddNodeToMenu failed" & vbNewLine & ex.Message, True) + MessageCollector.AddExceptionMessage("frmMain.AddNodeToMenu() failed", ex, Messages.MessageClass.ErrorMsg, True) End Try End Sub - Private Shared Sub ConMenItem_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) + Private Shared Sub ConnectionsMenuItem_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) If e.Button = MouseButtons.Left Then If TypeOf sender.Tag Is Connection.Info Then App.Runtime.OpenConnection(sender.Tag) diff --git a/mRemoteV1/Language/Language.Designer.vb b/mRemoteV1/Language/Language.Designer.vb index fc856250..b37ba6e0 100644 --- a/mRemoteV1/Language/Language.Designer.vb +++ b/mRemoteV1/Language/Language.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.296 +' Runtime Version:4.0.30319.1008 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. @@ -4573,15 +4573,6 @@ Namespace My End Get End Property - ''' - ''' Looks up a localized string similar to Quick Connect History Exists Failed!. - ''' - Friend Shared ReadOnly Property strQuickConnectHistoryExistsFailed() As String - Get - Return ResourceManager.GetString("strQuickConnectHistoryExistsFailed", resourceCulture) - End Get - End Property - ''' ''' Looks up a localized string similar to &Warn me when closing connections. ''' diff --git a/mRemoteV1/Language/Language.de.resx b/mRemoteV1/Language/Language.de.resx index d5501e73..f85fd238 100644 --- a/mRemoteV1/Language/Language.de.resx +++ b/mRemoteV1/Language/Language.de.resx @@ -1578,9 +1578,6 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel Direkte Verbindung fehlgeschlagen! - - Prüfung auf Direkt Verbindungs Historie fehlgeschlagen! - &Warnen wenn Verbindungen beendet werden diff --git a/mRemoteV1/Language/Language.es.resx b/mRemoteV1/Language/Language.es.resx index 4c5a55d0..dcbeb19d 100644 --- a/mRemoteV1/Language/Language.es.resx +++ b/mRemoteV1/Language/Language.es.resx @@ -1554,9 +1554,6 @@ Mensaje: Creación de conexión rápida fallida - - ¡Fallo en el Histórico de Conexiones Rápidas! - &Avisarme al cerrar conexiones diff --git a/mRemoteV1/Language/Language.fr.resx b/mRemoteV1/Language/Language.fr.resx index a638577b..bad2f297 100644 --- a/mRemoteV1/Language/Language.fr.resx +++ b/mRemoteV1/Language/Language.fr.resx @@ -1558,9 +1558,6 @@ Message: La connexion rapide à échoué - - Échec d'Existence d'Historique de Connexion Rapide ! - &M'avertir lors de la fermeture des connexions diff --git a/mRemoteV1/Language/Language.it.resx b/mRemoteV1/Language/Language.it.resx index 4a1c6290..6a9d478d 100644 --- a/mRemoteV1/Language/Language.it.resx +++ b/mRemoteV1/Language/Language.it.resx @@ -1558,9 +1558,6 @@ Messaggio: Operazione Creating Quick Connect fallita - - Operazione Quick Connect History Exists fallita! - &Avvisami alla chiusura delle connessioni diff --git a/mRemoteV1/Language/Language.nb-NO.resx b/mRemoteV1/Language/Language.nb-NO.resx index ddd23ea3..e62a486b 100644 --- a/mRemoteV1/Language/Language.nb-NO.resx +++ b/mRemoteV1/Language/Language.nb-NO.resx @@ -1576,9 +1576,6 @@ Melding: Oppretting av hurtigtilkobling mislyktes - - Hurtigtilkoblingshistorikk finnes fra før! - &Advar meg når tilkoblinger lukkes diff --git a/mRemoteV1/Language/Language.nl.resx b/mRemoteV1/Language/Language.nl.resx index 1d7adac5..899ca63d 100644 --- a/mRemoteV1/Language/Language.nl.resx +++ b/mRemoteV1/Language/Language.nl.resx @@ -1577,9 +1577,6 @@ Bericht: Het aanmaken van een snelle connectie is mislukt - - Snelle Connectie geschiedenis bestaat mislukt! - &Waarschuw bij het sluiten van connecties diff --git a/mRemoteV1/Language/Language.pt.resx b/mRemoteV1/Language/Language.pt.resx index cb60c78c..e6db571d 100644 --- a/mRemoteV1/Language/Language.pt.resx +++ b/mRemoteV1/Language/Language.pt.resx @@ -1538,9 +1538,6 @@ Descrição do erro: {1} Criação ligação rápida falhou - - Histórico de Ligação rápida falhou! - &Avisar-me quando fechar ligações diff --git a/mRemoteV1/Language/Language.resx b/mRemoteV1/Language/Language.resx index 74b3e9f5..fd38da2d 100644 --- a/mRemoteV1/Language/Language.resx +++ b/mRemoteV1/Language/Language.resx @@ -1639,9 +1639,6 @@ Message: Creating quick connect failed - - Quick Connect History Exists Failed! - &Warn me when closing connections diff --git a/mRemoteV1/Language/Language.ru.resx b/mRemoteV1/Language/Language.ru.resx index 60ba8955..5c9f6599 100644 --- a/mRemoteV1/Language/Language.ru.resx +++ b/mRemoteV1/Language/Language.ru.resx @@ -1583,9 +1583,6 @@ Созданить быстрое подключение не удалось - - Ошибка истории Быстрых подключений! - Предупреждать при закрытии подключений diff --git a/mRemoteV1/Language/Language.uk.resx b/mRemoteV1/Language/Language.uk.resx index 195afccc..06c2e304 100644 --- a/mRemoteV1/Language/Language.uk.resx +++ b/mRemoteV1/Language/Language.uk.resx @@ -1520,9 +1520,6 @@ VncSharpNG Control Version {0} Створити швидке з'єднання не вдалося - - Помилка історії Швидких з'єднань! - RAW diff --git a/mRemoteV1/Language/Language.zh-CN.resx b/mRemoteV1/Language/Language.zh-CN.resx index 3244a1b1..0b1b53d6 100644 --- a/mRemoteV1/Language/Language.zh-CN.resx +++ b/mRemoteV1/Language/Language.zh-CN.resx @@ -1563,9 +1563,6 @@ VncSharpNG 版本 {0} 快速连接创建失败! - - 快速连接历史记录检测失败 ! - (&W)关闭连接时确认 diff --git a/mRemoteV1/Language/Language.zh-TW.resx b/mRemoteV1/Language/Language.zh-TW.resx index 312db1e3..649b7b24 100644 --- a/mRemoteV1/Language/Language.zh-TW.resx +++ b/mRemoteV1/Language/Language.zh-TW.resx @@ -1545,9 +1545,6 @@ VncSharpNG Control 版本 {0} Creating quick connect 失敗 - - Quick Connect History Exists 失敗! - 關閉連線時警告(&W) diff --git a/mRemoteV1/My Project/Settings.Designer.vb b/mRemoteV1/My Project/Settings.Designer.vb index b31a1572..2abd21f2 100644 --- a/mRemoteV1/My Project/Settings.Designer.vb +++ b/mRemoteV1/My Project/Settings.Designer.vb @@ -2472,6 +2472,20 @@ Namespace My Me("InhDefaultAutomaticResize") = value End Set End Property + + _ + Public Property QuickConnectProtocol() As String + Get + Return CType(Me("QuickConnectProtocol"),String) + End Get + Set + Me("QuickConnectProtocol") = value + End Set + End Property End Class End Namespace diff --git a/mRemoteV1/My Project/Settings.settings b/mRemoteV1/My Project/Settings.settings index 6f384fe5..96ee66e8 100644 --- a/mRemoteV1/My Project/Settings.settings +++ b/mRemoteV1/My Project/Settings.settings @@ -563,5 +563,8 @@ False + + RDP + \ No newline at end of file diff --git a/mRemoteV1/UI/UI.Window.QuickConnect.resx b/mRemoteV1/UI/UI.Window.QuickConnect.resx deleted file mode 100644 index 19dc0dd8..00000000 --- a/mRemoteV1/UI/UI.Window.QuickConnect.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/mRemoteV1/UI/UI.Window.QuickConnect.vb b/mRemoteV1/UI/UI.Window.QuickConnect.vb deleted file mode 100644 index 330cb5f6..00000000 --- a/mRemoteV1/UI/UI.Window.QuickConnect.vb +++ /dev/null @@ -1,136 +0,0 @@ -Imports WeifenLuo.WinFormsUI.Docking -Imports System.Reflection -Imports mRemoteNG.App.Runtime - -Namespace UI - Namespace Window - Public Class QuickConnect - Inherits UI.Window.Base - -#Region "Form Init" - Friend WithEvents btnCancel As System.Windows.Forms.Button - Friend WithEvents flpProtocols As System.Windows.Forms.FlowLayoutPanel - - Private Sub InitializeComponent() - Me.flpProtocols = New System.Windows.Forms.FlowLayoutPanel - Me.btnCancel = New System.Windows.Forms.Button - Me.SuspendLayout() - ' - 'flpProtocols - ' - Me.flpProtocols.Dock = System.Windows.Forms.DockStyle.Fill - Me.flpProtocols.Location = New System.Drawing.Point(0, 0) - Me.flpProtocols.Name = "flpProtocols" - Me.flpProtocols.Size = New System.Drawing.Size(271, 155) - Me.flpProtocols.TabIndex = 10 - ' - 'btnCancel - ' - Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnCancel.Location = New System.Drawing.Point(-200, -200) - Me.btnCancel.Name = "btnCancel" - Me.btnCancel.Size = New System.Drawing.Size(75, 23) - Me.btnCancel.TabIndex = 20 - Me.btnCancel.TabStop = False - Me.btnCancel.Text = My.Language.strButtonCancel - Me.btnCancel.UseVisualStyleBackColor = True - ' - 'QuickConnect - ' - Me.CancelButton = Me.btnCancel - Me.ClientSize = New System.Drawing.Size(271, 155) - Me.Controls.Add(Me.btnCancel) - Me.Controls.Add(Me.flpProtocols) - Me.HideOnClose = True - Me.Icon = Global.mRemoteNG.My.Resources.Resources.Play_Quick_Icon - Me.Name = "QuickConnect" - Me.TabText = My.Language.strQuickConnect - Me.Text = My.Language.strQuickConnect - Me.ResumeLayout(False) - - End Sub -#End Region - -#Region "Public Methods" - Public Sub New(ByVal Panel As DockContent) - Me.WindowType = Type.Connection - Me.DockPnl = Panel - Me.InitializeComponent() - End Sub -#End Region - -#Region "Public Properties" - Private _ConnectionInfo As mRemoteNG.Connection.Info - Public Property ConnectionInfo() As mRemoteNG.Connection.Info - Get - Return Me._ConnectionInfo - End Get - Set(ByVal value As mRemoteNG.Connection.Info) - Me._ConnectionInfo = value - End Set - End Property -#End Region - - Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click - Me.Hide() - End Sub - - Private Sub QuickConnect_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load - ApplyLanguage() - - Me.CreateButtons() - - Me.flpProtocols.Controls(0).Focus() - End Sub - - Private Sub ApplyLanguage() - btnCancel.Text = My.Language.strButtonCancel - TabText = My.Language.strQuickConnect - Text = My.Language.strQuickConnect - End Sub - - Private Sub CreateButtons() - Try - For Each fI As FieldInfo In GetType(mRemoteNG.Connection.Protocol.Protocols).GetFields - If fI.Name <> "value__" And fI.Name <> "NONE" And fI.Name <> "IntApp" Then - Dim nBtn As New Button - nBtn.Text = fI.Name - nBtn.FlatStyle = FlatStyle.Flat - nBtn.Size = New Size(60, 40) - nBtn.Parent = Me.flpProtocols - AddHandler nBtn.Click, AddressOf ProtocolButton_Click - nBtn.Show() - End If - Next - Catch ex As Exception - MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "CreateButtons (UI.Window.QuickConnect) failed" & vbNewLine & ex.Message, True) - End Try - End Sub - - Private Sub ProtocolButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) - Try - Me._ConnectionInfo.Protocol = Tools.Misc.StringToEnum(GetType(mRemoteNG.Connection.Protocol.Protocols), sender.Text) - - If Me._ConnectionInfo.Port = 0 Then - Me._ConnectionInfo.SetDefaultPort() - - If mRemoteNG.Connection.QuickConnect.History.Exists(Me._ConnectionInfo.Hostname) = False Then - mRemoteNG.Connection.QuickConnect.History.Add(Me._ConnectionInfo.Hostname) - End If - Else - If mRemoteNG.Connection.QuickConnect.History.Exists(Me._ConnectionInfo.Hostname) = False Then - mRemoteNG.Connection.QuickConnect.History.Add(Me._ConnectionInfo.Hostname & ":" & Me._ConnectionInfo.Port) - End If - End If - - App.Runtime.OpenConnection(Me._ConnectionInfo, mRemoteNG.Connection.Info.Force.DoNotJump) - - Me.Hide() - Catch ex As Exception - MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ProtocolButton_Click (UI.Window.QuickConnect) failed" & vbNewLine & ex.Message, True) - End Try - End Sub - End Class - End Namespace -End Namespace \ No newline at end of file diff --git a/mRemoteV1/app.config b/mRemoteV1/app.config index 39bf896e..2f025328 100644 --- a/mRemoteV1/app.config +++ b/mRemoteV1/app.config @@ -595,6 +595,9 @@ False + + RDP + diff --git a/mRemoteV1/mRemoteV1.vbproj b/mRemoteV1/mRemoteV1.vbproj index 41e39b2e..60fe3fd3 100644 --- a/mRemoteV1/mRemoteV1.vbproj +++ b/mRemoteV1/mRemoteV1.vbproj @@ -187,6 +187,12 @@ + + Component + + + Component + @@ -221,7 +227,6 @@ - @@ -331,9 +336,6 @@ Form - - Form - Form @@ -388,13 +390,19 @@ Designer - - + + Designer + + + Designer + Designer - + + Designer + ResXFileCodeGenerator Language.Designer.vb @@ -413,8 +421,12 @@ Designer - - + + Designer + + + Designer + VbMyResourcesResXFileCodeGenerator Resources.Designer.vb @@ -469,10 +481,6 @@ UI.Window.PortScan.vb Designer - - UI.Window.QuickConnect.vb - Designer - UI.Window.Export.vb Designer