Files
mRemoteNG/mRemoteV1/UI/Controls/ConnectionContextMenu.cs

820 lines
37 KiB
C#

using System;
using System.ComponentModel;
using System.Linq;
using System.Windows.Forms;
using mRemoteNG.App;
using mRemoteNG.Connection;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Container;
using mRemoteNG.Tools;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
using mRemoteNG.UI.Window;
// ReSharper disable UnusedParameter.Local
namespace mRemoteNG.UI.Controls
{
public sealed class ConnectionContextMenu : ContextMenuStrip
{
private ToolStripMenuItem _cMenTreeAddConnection;
private ToolStripMenuItem _cMenTreeAddFolder;
private ToolStripSeparator _cMenTreeSep1;
private ToolStripMenuItem _cMenTreeConnect;
private ToolStripMenuItem _cMenTreeConnectWithOptions;
private ToolStripMenuItem _cMenTreeConnectWithOptionsConnectToConsoleSession;
private ToolStripMenuItem _cMenTreeConnectWithOptionsNoCredentials;
private ToolStripMenuItem _cMenTreeConnectWithOptionsConnectInFullscreen;
private ToolStripMenuItem _cMenTreeDisconnect;
private ToolStripSeparator _cMenTreeSep2;
private ToolStripMenuItem _cMenTreeToolsTransferFile;
private ToolStripMenuItem _cMenTreeToolsSort;
private ToolStripMenuItem _cMenTreeToolsSortAscending;
private ToolStripMenuItem _cMenTreeToolsSortDescending;
private ToolStripSeparator _cMenTreeSep3;
private ToolStripMenuItem _cMenTreeRename;
private ToolStripMenuItem _cMenTreeDelete;
private ToolStripSeparator _cMenTreeSep4;
private ToolStripMenuItem _cMenTreeMoveUp;
private ToolStripMenuItem _cMenTreeMoveDown;
private ToolStripMenuItem _cMenTreeToolsExternalApps;
private ToolStripMenuItem _cMenTreeDuplicate;
private ToolStripMenuItem _cMenTreeConnectWithOptionsChoosePanelBeforeConnecting;
private ToolStripMenuItem _cMenTreeConnectWithOptionsDontConnectToConsoleSession;
private ToolStripMenuItem _cMenTreeImport;
private ToolStripMenuItem _cMenTreeExportFile;
private ToolStripSeparator _toolStripSeparator1;
private ToolStripMenuItem _cMenTreeImportFile;
private ToolStripMenuItem _cMenTreeImportActiveDirectory;
private ToolStripMenuItem _cMenTreeImportPortScan;
private readonly ConnectionTree _connectionTree;
private readonly IConnectionInitiator _connectionInitiator;
private readonly SSHTransferWindow _sshTransferWindow;
private readonly Export _export;
private readonly ExternalToolsService _externalToolsService;
private readonly Import _import;
private readonly IConnectionsService _connectionsService;
// TODO - this is only a property to break up a circular dependency
public Action<WindowType> ShowWindowAction { get; set; } = type => { };
public ConnectionContextMenu(
ConnectionTree connectionTree,
IConnectionInitiator connectionInitiator,
SSHTransferWindow sshTransferWindow,
Export export,
ExternalToolsService externalToolsService,
Import import,
IConnectionsService connectionsService)
{
_connectionsService = connectionsService.ThrowIfNull(nameof(connectionsService));
_connectionTree = connectionTree.ThrowIfNull(nameof(connectionTree));
_connectionInitiator = connectionInitiator.ThrowIfNull(nameof(connectionInitiator));
_sshTransferWindow = sshTransferWindow.ThrowIfNull(nameof(sshTransferWindow));
_export = export.ThrowIfNull(nameof(export));
_externalToolsService = externalToolsService.ThrowIfNull(nameof(externalToolsService));
_import = import.ThrowIfNull(nameof(import));
InitializeComponent();
ApplyLanguage();
EnableShortcutKeys();
Opening += (sender, args) =>
{
AddExternalApps();
if (_connectionTree.SelectedNode == null)
{
args.Cancel = true;
return;
}
ShowHideMenuItems();
};
}
private void InitializeComponent()
{
_cMenTreeConnect = new ToolStripMenuItem();
_cMenTreeConnectWithOptions = new ToolStripMenuItem();
_cMenTreeConnectWithOptionsConnectToConsoleSession = new ToolStripMenuItem();
_cMenTreeConnectWithOptionsDontConnectToConsoleSession = new ToolStripMenuItem();
_cMenTreeConnectWithOptionsConnectInFullscreen = new ToolStripMenuItem();
_cMenTreeConnectWithOptionsNoCredentials = new ToolStripMenuItem();
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting = new ToolStripMenuItem();
_cMenTreeDisconnect = new ToolStripMenuItem();
_cMenTreeSep1 = new ToolStripSeparator();
_cMenTreeToolsExternalApps = new ToolStripMenuItem();
_cMenTreeToolsTransferFile = new ToolStripMenuItem();
_cMenTreeSep2 = new ToolStripSeparator();
_cMenTreeDuplicate = new ToolStripMenuItem();
_cMenTreeRename = new ToolStripMenuItem();
_cMenTreeDelete = new ToolStripMenuItem();
_cMenTreeSep3 = new ToolStripSeparator();
_cMenTreeImport = new ToolStripMenuItem();
_cMenTreeImportFile = new ToolStripMenuItem();
_cMenTreeImportActiveDirectory = new ToolStripMenuItem();
_cMenTreeImportPortScan = new ToolStripMenuItem();
_cMenTreeExportFile = new ToolStripMenuItem();
_cMenTreeSep4 = new ToolStripSeparator();
_cMenTreeAddConnection = new ToolStripMenuItem();
_cMenTreeAddFolder = new ToolStripMenuItem();
_toolStripSeparator1 = new ToolStripSeparator();
_cMenTreeToolsSort = new ToolStripMenuItem();
_cMenTreeToolsSortAscending = new ToolStripMenuItem();
_cMenTreeToolsSortDescending = new ToolStripMenuItem();
_cMenTreeMoveUp = new ToolStripMenuItem();
_cMenTreeMoveDown = new ToolStripMenuItem();
//
// cMenTree
//
Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0);
Items.AddRange(new ToolStripItem[] {
_cMenTreeConnect,
_cMenTreeConnectWithOptions,
_cMenTreeDisconnect,
_cMenTreeSep1,
_cMenTreeToolsExternalApps,
_cMenTreeToolsTransferFile,
_cMenTreeSep2,
_cMenTreeDuplicate,
_cMenTreeRename,
_cMenTreeDelete,
_cMenTreeSep3,
_cMenTreeImport,
_cMenTreeExportFile,
_cMenTreeSep4,
_cMenTreeAddConnection,
_cMenTreeAddFolder,
_toolStripSeparator1,
_cMenTreeToolsSort,
_cMenTreeMoveUp,
_cMenTreeMoveDown
});
Name = "cMenTree";
RenderMode = ToolStripRenderMode.Professional;
Size = new System.Drawing.Size(200, 364);
//
// cMenTreeConnect
//
_cMenTreeConnect.Image = Resources.Play;
_cMenTreeConnect.Name = "_cMenTreeConnect";
_cMenTreeConnect.Size = new System.Drawing.Size(199, 22);
_cMenTreeConnect.Text = "Connect";
_cMenTreeConnect.Click += OnConnectClicked;
//
// cMenTreeConnectWithOptions
//
_cMenTreeConnectWithOptions.DropDownItems.AddRange(new ToolStripItem[] {
_cMenTreeConnectWithOptionsConnectToConsoleSession,
_cMenTreeConnectWithOptionsDontConnectToConsoleSession,
_cMenTreeConnectWithOptionsConnectInFullscreen,
_cMenTreeConnectWithOptionsNoCredentials,
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting
});
_cMenTreeConnectWithOptions.Name = "_cMenTreeConnectWithOptions";
_cMenTreeConnectWithOptions.Size = new System.Drawing.Size(199, 22);
_cMenTreeConnectWithOptions.Text = "Connect (with options)";
//
// cMenTreeConnectWithOptionsConnectToConsoleSession
//
_cMenTreeConnectWithOptionsConnectToConsoleSession.Image = Resources.monitor_go;
_cMenTreeConnectWithOptionsConnectToConsoleSession.Name = "_cMenTreeConnectWithOptionsConnectToConsoleSession";
_cMenTreeConnectWithOptionsConnectToConsoleSession.Size = new System.Drawing.Size(245, 22);
_cMenTreeConnectWithOptionsConnectToConsoleSession.Text = "Connect to console session";
_cMenTreeConnectWithOptionsConnectToConsoleSession.Click += OnConnectToConsoleSessionClicked;
//
// cMenTreeConnectWithOptionsDontConnectToConsoleSession
//
_cMenTreeConnectWithOptionsDontConnectToConsoleSession.Image = Resources.monitor_delete;
_cMenTreeConnectWithOptionsDontConnectToConsoleSession.Name = "_cMenTreeConnectWithOptionsDontConnectToConsoleSession";
_cMenTreeConnectWithOptionsDontConnectToConsoleSession.Size = new System.Drawing.Size(245, 22);
_cMenTreeConnectWithOptionsDontConnectToConsoleSession.Text = "Don\'t connect to console session";
_cMenTreeConnectWithOptionsDontConnectToConsoleSession.Visible = false;
_cMenTreeConnectWithOptionsDontConnectToConsoleSession.Click += OnDontConnectToConsoleSessionClicked;
//
// cMenTreeConnectWithOptionsConnectInFullscreen
//
_cMenTreeConnectWithOptionsConnectInFullscreen.Image = Resources.arrow_out;
_cMenTreeConnectWithOptionsConnectInFullscreen.Name = "_cMenTreeConnectWithOptionsConnectInFullscreen";
_cMenTreeConnectWithOptionsConnectInFullscreen.Size = new System.Drawing.Size(245, 22);
_cMenTreeConnectWithOptionsConnectInFullscreen.Text = "Connect in fullscreen";
_cMenTreeConnectWithOptionsConnectInFullscreen.Click += OnConnectInFullscreenClicked;
//
// cMenTreeConnectWithOptionsNoCredentials
//
_cMenTreeConnectWithOptionsNoCredentials.Image = Resources.key_delete;
_cMenTreeConnectWithOptionsNoCredentials.Name = "_cMenTreeConnectWithOptionsNoCredentials";
_cMenTreeConnectWithOptionsNoCredentials.Size = new System.Drawing.Size(245, 22);
_cMenTreeConnectWithOptionsNoCredentials.Text = "Connect without credentials";
_cMenTreeConnectWithOptionsNoCredentials.Click += OnConnectWithNoCredentialsClick;
//
// cMenTreeConnectWithOptionsChoosePanelBeforeConnecting
//
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Image = Resources.Panels;
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Name = "_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting";
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Size = new System.Drawing.Size(245, 22);
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Text = "Choose panel before connecting";
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Click += OnChoosePanelBeforeConnectingClicked;
//
// cMenTreeDisconnect
//
_cMenTreeDisconnect.Image = Resources.Pause;
_cMenTreeDisconnect.Name = "_cMenTreeDisconnect";
_cMenTreeDisconnect.Size = new System.Drawing.Size(199, 22);
_cMenTreeDisconnect.Text = "Disconnect";
_cMenTreeDisconnect.Click += OnDisconnectClicked;
//
// cMenTreeSep1
//
_cMenTreeSep1.Name = "_cMenTreeSep1";
_cMenTreeSep1.Size = new System.Drawing.Size(196, 6);
//
// cMenTreeToolsExternalApps
//
_cMenTreeToolsExternalApps.Image = Resources.ExtApp;
_cMenTreeToolsExternalApps.Name = "_cMenTreeToolsExternalApps";
_cMenTreeToolsExternalApps.Size = new System.Drawing.Size(199, 22);
_cMenTreeToolsExternalApps.Text = "External Applications";
//
// cMenTreeToolsTransferFile
//
_cMenTreeToolsTransferFile.Image = Resources.SSHTransfer;
_cMenTreeToolsTransferFile.Name = "_cMenTreeToolsTransferFile";
_cMenTreeToolsTransferFile.Size = new System.Drawing.Size(199, 22);
_cMenTreeToolsTransferFile.Text = "Transfer File (SSH)";
_cMenTreeToolsTransferFile.Click += OnTransferFileClicked;
//
// cMenTreeSep2
//
_cMenTreeSep2.Name = "_cMenTreeSep2";
_cMenTreeSep2.Size = new System.Drawing.Size(196, 6);
//
// cMenTreeDuplicate
//
_cMenTreeDuplicate.Image = Resources.page_copy;
_cMenTreeDuplicate.Name = "_cMenTreeDuplicate";
_cMenTreeDuplicate.Size = new System.Drawing.Size(199, 22);
_cMenTreeDuplicate.Text = "Duplicate";
_cMenTreeDuplicate.Click += OnDuplicateClicked;
//
// cMenTreeRename
//
_cMenTreeRename.Image = Resources.Rename;
_cMenTreeRename.Name = "_cMenTreeRename";
_cMenTreeRename.Size = new System.Drawing.Size(199, 22);
_cMenTreeRename.Text = "Rename";
_cMenTreeRename.Click += OnRenameClicked;
//
// cMenTreeDelete
//
_cMenTreeDelete.Image = Resources.Delete;
_cMenTreeDelete.Name = "_cMenTreeDelete";
_cMenTreeDelete.Size = new System.Drawing.Size(199, 22);
_cMenTreeDelete.Text = "Delete";
_cMenTreeDelete.Click += OnDeleteClicked;
//
// cMenTreeSep3
//
_cMenTreeSep3.Name = "_cMenTreeSep3";
_cMenTreeSep3.Size = new System.Drawing.Size(196, 6);
//
// cMenTreeImport
//
_cMenTreeImport.DropDownItems.AddRange(new ToolStripItem[] {
_cMenTreeImportFile,
_cMenTreeImportActiveDirectory,
_cMenTreeImportPortScan
});
_cMenTreeImport.Name = "_cMenTreeImport";
_cMenTreeImport.Size = new System.Drawing.Size(199, 22);
_cMenTreeImport.Text = "&Import";
//
// cMenTreeImportFile
//
_cMenTreeImportFile.Name = "_cMenTreeImportFile";
_cMenTreeImportFile.Size = new System.Drawing.Size(226, 22);
_cMenTreeImportFile.Text = "Import from &File...";
_cMenTreeImportFile.Click += OnImportFileClicked;
//
// cMenTreeImportActiveDirectory
//
_cMenTreeImportActiveDirectory.Name = "_cMenTreeImportActiveDirectory";
_cMenTreeImportActiveDirectory.Size = new System.Drawing.Size(226, 22);
_cMenTreeImportActiveDirectory.Text = "Import from &Active Directory...";
_cMenTreeImportActiveDirectory.Click += OnImportActiveDirectoryClicked;
//
// cMenTreeImportPortScan
//
_cMenTreeImportPortScan.Name = "_cMenTreeImportPortScan";
_cMenTreeImportPortScan.Size = new System.Drawing.Size(226, 22);
_cMenTreeImportPortScan.Text = "Import from &Port Scan...";
_cMenTreeImportPortScan.Click += OnImportPortScanClicked;
//
// cMenTreeExportFile
//
_cMenTreeExportFile.Name = "_cMenTreeExportFile";
_cMenTreeExportFile.Size = new System.Drawing.Size(199, 22);
_cMenTreeExportFile.Text = "&Export to File...";
_cMenTreeExportFile.Click += OnExportFileClicked;
//
// cMenTreeSep4
//
_cMenTreeSep4.Name = "_cMenTreeSep4";
_cMenTreeSep4.Size = new System.Drawing.Size(196, 6);
//
// cMenTreeAddConnection
//
_cMenTreeAddConnection.Image = Resources.Connection_Add;
_cMenTreeAddConnection.Name = "_cMenTreeAddConnection";
_cMenTreeAddConnection.Size = new System.Drawing.Size(199, 22);
_cMenTreeAddConnection.Text = "New Connection";
_cMenTreeAddConnection.Click += OnAddConnectionClicked;
//
// cMenTreeAddFolder
//
_cMenTreeAddFolder.Image = Resources.Folder_Add;
_cMenTreeAddFolder.Name = "_cMenTreeAddFolder";
_cMenTreeAddFolder.Size = new System.Drawing.Size(199, 22);
_cMenTreeAddFolder.Text = "New Folder";
_cMenTreeAddFolder.Click += OnAddFolderClicked;
//
// ToolStripSeparator1
//
_toolStripSeparator1.Name = "_toolStripSeparator1";
_toolStripSeparator1.Size = new System.Drawing.Size(196, 6);
//
// cMenTreeToolsSort
//
_cMenTreeToolsSort.DropDownItems.AddRange(new ToolStripItem[] {
_cMenTreeToolsSortAscending,
_cMenTreeToolsSortDescending
});
_cMenTreeToolsSort.Name = "_cMenTreeToolsSort";
_cMenTreeToolsSort.Size = new System.Drawing.Size(199, 22);
_cMenTreeToolsSort.Text = "Sort";
//
// cMenTreeToolsSortAscending
//
_cMenTreeToolsSortAscending.Image = Resources.Sort_AZ;
_cMenTreeToolsSortAscending.Name = "_cMenTreeToolsSortAscending";
_cMenTreeToolsSortAscending.Size = new System.Drawing.Size(161, 22);
_cMenTreeToolsSortAscending.Text = "Ascending (A-Z)";
_cMenTreeToolsSortAscending.Click += OnSortAscendingClicked;
//
// cMenTreeToolsSortDescending
//
_cMenTreeToolsSortDescending.Image = Resources.Sort_ZA;
_cMenTreeToolsSortDescending.Name = "_cMenTreeToolsSortDescending";
_cMenTreeToolsSortDescending.Size = new System.Drawing.Size(161, 22);
_cMenTreeToolsSortDescending.Text = "Descending (Z-A)";
_cMenTreeToolsSortDescending.Click += OnSortDescendingClicked;
//
// cMenTreeMoveUp
//
_cMenTreeMoveUp.Image = Resources.Arrow_Up;
_cMenTreeMoveUp.Name = "_cMenTreeMoveUp";
_cMenTreeMoveUp.Size = new System.Drawing.Size(199, 22);
_cMenTreeMoveUp.Text = "Move up";
_cMenTreeMoveUp.Click += OnMoveUpClicked;
//
// cMenTreeMoveDown
//
_cMenTreeMoveDown.Image = Resources.Arrow_Down;
_cMenTreeMoveDown.Name = "_cMenTreeMoveDown";
_cMenTreeMoveDown.Size = new System.Drawing.Size(199, 22);
_cMenTreeMoveDown.Text = "Move down";
_cMenTreeMoveDown.Click += OnMoveDownClicked;
}
private void ApplyLanguage()
{
_cMenTreeConnect.Text = Language.strConnect;
_cMenTreeConnectWithOptions.Text = Language.strConnectWithOptions;
_cMenTreeConnectWithOptionsConnectToConsoleSession.Text = Language.strConnectToConsoleSession;
_cMenTreeConnectWithOptionsDontConnectToConsoleSession.Text = Language.strDontConnectToConsoleSessionMenuItem;
_cMenTreeConnectWithOptionsConnectInFullscreen.Text = Language.strConnectInFullscreen;
_cMenTreeConnectWithOptionsNoCredentials.Text = Language.strConnectNoCredentials;
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Text = Language.strChoosePanelBeforeConnecting;
_cMenTreeDisconnect.Text = Language.strMenuDisconnect;
_cMenTreeToolsExternalApps.Text = Language.strMenuExternalTools;
_cMenTreeToolsTransferFile.Text = Language.strMenuTransferFile;
_cMenTreeDuplicate.Text = Language.strDuplicate;
_cMenTreeRename.Text = Language.strRename;
_cMenTreeDelete.Text = Language.strMenuDelete;
_cMenTreeImport.Text = Language.strImportMenuItem;
_cMenTreeImportFile.Text = Language.strImportFromFileMenuItem;
_cMenTreeImportActiveDirectory.Text = Language.strImportAD;
_cMenTreeImportPortScan.Text = Language.strImportPortScan;
_cMenTreeExportFile.Text = Language.strExportToFileMenuItem;
_cMenTreeAddConnection.Text = Language.strAddConnection;
_cMenTreeAddFolder.Text = Language.strAddFolder;
_cMenTreeToolsSort.Text = Language.strSort;
_cMenTreeToolsSortAscending.Text = Language.strSortAsc;
_cMenTreeToolsSortDescending.Text = Language.strSortDesc;
_cMenTreeMoveUp.Text = Language.strMoveUp;
_cMenTreeMoveDown.Text = Language.strMoveDown;
}
internal void ShowHideMenuItems()
{
try
{
Enabled = true;
EnableMenuItemsRecursive(Items);
if (_connectionTree.SelectedNode is RootPuttySessionsNodeInfo)
{
ShowHideMenuItemsForRootPuttyNode();
}
else if (_connectionTree.SelectedNode is RootNodeInfo)
{
ShowHideMenuItemsForRootConnectionNode();
}
else if (_connectionTree.SelectedNode is ContainerInfo)
{
ShowHideMenuItemsForContainer(_connectionTree.SelectedNode);
}
else if (_connectionTree.SelectedNode is PuttySessionInfo)
{
ShowHideMenuItemsForPuttyNode(_connectionTree.SelectedNode);
}
else
{
ShowHideMenuItemsForConnectionNode(_connectionTree.SelectedNode);
}
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionStackTrace("ShowHideMenuItems (UI.Controls.ConnectionContextMenu) failed", ex);
}
}
internal void ShowHideMenuItemsForRootPuttyNode()
{
_cMenTreeAddConnection.Enabled = false;
_cMenTreeAddFolder.Enabled = false;
_cMenTreeConnect.Enabled = false;
_cMenTreeConnectWithOptions.Enabled = false;
_cMenTreeDisconnect.Enabled = false;
_cMenTreeToolsTransferFile.Enabled = false;
_cMenTreeConnectWithOptions.Enabled = false;
_cMenTreeToolsSort.Enabled = false;
_cMenTreeToolsExternalApps.Enabled = false;
_cMenTreeDuplicate.Enabled = false;
_cMenTreeImport.Enabled = false;
_cMenTreeExportFile.Enabled = false;
_cMenTreeRename.Enabled = false;
_cMenTreeDelete.Enabled = false;
_cMenTreeMoveUp.Enabled = false;
_cMenTreeMoveDown.Enabled = false;
}
internal void ShowHideMenuItemsForRootConnectionNode()
{
_cMenTreeConnect.Enabled = false;
_cMenTreeConnectWithOptions.Enabled = false;
_cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = false;
_cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = false;
_cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Enabled = false;
_cMenTreeDisconnect.Enabled = false;
_cMenTreeToolsTransferFile.Enabled = false;
_cMenTreeToolsExternalApps.Enabled = false;
_cMenTreeDuplicate.Enabled = false;
_cMenTreeDelete.Enabled = false;
_cMenTreeMoveUp.Enabled = false;
_cMenTreeMoveDown.Enabled = false;
}
internal void ShowHideMenuItemsForContainer(ConnectionInfo connectionInfo)
{
_cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = false;
_cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = false;
_cMenTreeDisconnect.Enabled = false;
var openConnections = ((ContainerInfo)connectionInfo).Children.Sum(child => child.OpenConnections.Count);
if (openConnections > 0)
_cMenTreeDisconnect.Enabled = true;
_cMenTreeToolsTransferFile.Enabled = false;
_cMenTreeToolsExternalApps.Enabled = false;
}
internal void ShowHideMenuItemsForPuttyNode(ConnectionInfo connectionInfo)
{
_cMenTreeAddConnection.Enabled = false;
_cMenTreeAddFolder.Enabled = false;
if (connectionInfo.OpenConnections.Count == 0)
_cMenTreeDisconnect.Enabled = false;
if (!(connectionInfo.Protocol == ProtocolType.SSH1 | connectionInfo.Protocol == ProtocolType.SSH2))
_cMenTreeToolsTransferFile.Enabled = false;
_cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = false;
_cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = false;
_cMenTreeToolsSort.Enabled = false;
_cMenTreeDuplicate.Enabled = false;
_cMenTreeRename.Enabled = false;
_cMenTreeDelete.Enabled = false;
_cMenTreeMoveUp.Enabled = false;
_cMenTreeMoveDown.Enabled = false;
_cMenTreeImport.Enabled = false;
_cMenTreeExportFile.Enabled = false;
}
internal void ShowHideMenuItemsForConnectionNode(ConnectionInfo connectionInfo)
{
if (connectionInfo.OpenConnections.Count == 0)
_cMenTreeDisconnect.Enabled = false;
if (!(connectionInfo.Protocol == ProtocolType.SSH1 | connectionInfo.Protocol == ProtocolType.SSH2))
_cMenTreeToolsTransferFile.Enabled = false;
if (!(connectionInfo.Protocol == ProtocolType.RDP | connectionInfo.Protocol == ProtocolType.ICA))
{
_cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = false;
_cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = false;
}
if (connectionInfo.Protocol == ProtocolType.IntApp)
_cMenTreeConnectWithOptionsNoCredentials.Enabled = false;
}
internal void DisableShortcutKeys()
{
_cMenTreeConnect.ShortcutKeys = Keys.None;
_cMenTreeDuplicate.ShortcutKeys = Keys.None;
_cMenTreeRename.ShortcutKeys = Keys.None;
_cMenTreeDelete.ShortcutKeys = Keys.None;
_cMenTreeMoveUp.ShortcutKeys = Keys.None;
_cMenTreeMoveDown.ShortcutKeys = Keys.None;
}
internal void EnableShortcutKeys()
{
_cMenTreeConnect.ShortcutKeys = ((Keys.Control | Keys.Shift) | Keys.C);
_cMenTreeDuplicate.ShortcutKeys = Keys.Control | Keys.D;
_cMenTreeRename.ShortcutKeys = Keys.F2;
_cMenTreeDelete.ShortcutKeys = Keys.Delete;
_cMenTreeMoveUp.ShortcutKeys = Keys.Control | Keys.Up;
_cMenTreeMoveDown.ShortcutKeys = Keys.Control | Keys.Down;
}
private static void EnableMenuItemsRecursive(ToolStripItemCollection items, bool enable = true)
{
foreach (ToolStripItem item in items)
{
var menuItem = item as ToolStripMenuItem;
if (menuItem == null)
{
continue;
}
menuItem.Enabled = enable;
if (menuItem.HasDropDownItems)
{
EnableMenuItemsRecursive(menuItem.DropDownItems, enable);
}
}
}
private void AddExternalApps()
{
try
{
ResetExternalAppMenu();
foreach (var externalTool in _externalToolsService.ExternalTools)
{
var menuItem = new ToolStripMenuItem
{
Text = externalTool.DisplayName,
Tag = externalTool,
Image = externalTool.Image
};
menuItem.Click += OnExternalToolClicked;
_cMenTreeToolsExternalApps.DropDownItems.Add(menuItem);
}
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionStackTrace("cMenTreeTools_DropDownOpening failed (UI.Window.ConnectionTreeWindow)", ex);
}
}
private void ResetExternalAppMenu()
{
if (_cMenTreeToolsExternalApps.DropDownItems.Count <= 0) return;
for (var i = _cMenTreeToolsExternalApps.DropDownItems.Count - 1; i >= 0; i--)
_cMenTreeToolsExternalApps.DropDownItems[i].Dispose();
_cMenTreeToolsExternalApps.DropDownItems.Clear();
}
#region Click handlers
private void OnConnectClicked(object sender, EventArgs e)
{
var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo;
if (selectedNodeAsContainer != null)
_connectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.DoNotJump);
else
_connectionInitiator.OpenConnection(_connectionTree.SelectedNode, ConnectionInfo.Force.DoNotJump);
}
private void OnConnectToConsoleSessionClicked(object sender, EventArgs e)
{
var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo;
if (selectedNodeAsContainer != null)
_connectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.UseConsoleSession | ConnectionInfo.Force.DoNotJump);
else
_connectionInitiator.OpenConnection(_connectionTree.SelectedNode, ConnectionInfo.Force.UseConsoleSession | ConnectionInfo.Force.DoNotJump);
}
private void OnDontConnectToConsoleSessionClicked(object sender, EventArgs e)
{
var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo;
if (selectedNodeAsContainer != null)
_connectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.DontUseConsoleSession | ConnectionInfo.Force.DoNotJump);
else
_connectionInitiator.OpenConnection(_connectionTree.SelectedNode, ConnectionInfo.Force.DontUseConsoleSession | ConnectionInfo.Force.DoNotJump);
}
private void OnConnectInFullscreenClicked(object sender, EventArgs e)
{
var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo;
if (selectedNodeAsContainer != null)
_connectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.Fullscreen | ConnectionInfo.Force.DoNotJump);
else
_connectionInitiator.OpenConnection(_connectionTree.SelectedNode, ConnectionInfo.Force.Fullscreen | ConnectionInfo.Force.DoNotJump);
}
private void OnConnectWithNoCredentialsClick(object sender, EventArgs e)
{
var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo;
if (selectedNodeAsContainer != null)
_connectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.NoCredentials);
else
_connectionInitiator.OpenConnection(_connectionTree.SelectedNode, ConnectionInfo.Force.NoCredentials);
}
private void OnChoosePanelBeforeConnectingClicked(object sender, EventArgs e)
{
var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo;
if (selectedNodeAsContainer != null)
_connectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.OverridePanel | ConnectionInfo.Force.DoNotJump);
else
_connectionInitiator.OpenConnection(_connectionTree.SelectedNode, ConnectionInfo.Force.OverridePanel | ConnectionInfo.Force.DoNotJump);
}
private void OnDisconnectClicked(object sender, EventArgs e)
{
DisconnectConnection(_connectionTree.SelectedNode);
}
public void DisconnectConnection(ConnectionInfo connectionInfo)
{
try
{
if (connectionInfo == null) return;
var nodeAsContainer = connectionInfo as ContainerInfo;
if (nodeAsContainer != null)
{
foreach (var child in nodeAsContainer.Children)
{
for (var i = 0; i <= child.OpenConnections.Count - 1; i++)
{
child.OpenConnections[i].Disconnect();
}
}
}
else
{
for (var i = 0; i <= connectionInfo.OpenConnections.Count - 1; i++)
{
connectionInfo.OpenConnections[i].Disconnect();
}
}
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionStackTrace("DisconnectConnection (UI.Window.ConnectionTreeWindow) failed", ex);
}
}
private void OnTransferFileClicked(object sender, EventArgs e)
{
SshTransferFile();
}
public void SshTransferFile()
{
try
{
ShowWindowAction(WindowType.SSHTransfer);
_sshTransferWindow.Hostname = _connectionTree.SelectedNode.Hostname;
_sshTransferWindow.Username = _connectionTree.SelectedNode.Username;
_sshTransferWindow.Password = _connectionTree.SelectedNode.Password;
_sshTransferWindow.Port = Convert.ToString(_connectionTree.SelectedNode.Port);
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionStackTrace("SSHTransferFile (UI.Window.ConnectionTreeWindow) failed", ex);
}
}
private void OnDuplicateClicked(object sender, EventArgs e)
{
_connectionTree.DuplicateSelectedNode();
}
private void OnRenameClicked(object sender, EventArgs e)
{
_connectionTree.RenameSelectedNode();
}
private void OnDeleteClicked(object sender, EventArgs e)
{
_connectionTree.DeleteSelectedNode();
}
private void OnImportFileClicked(object sender, EventArgs e)
{
ContainerInfo selectedNodeAsContainer;
if (_connectionTree.SelectedNode == null)
selectedNodeAsContainer = _connectionsService.ConnectionTreeModel.RootNodes.First();
else
selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo ?? _connectionTree.SelectedNode.Parent;
_import.ImportFromFile(selectedNodeAsContainer);
}
private void OnImportActiveDirectoryClicked(object sender, EventArgs e)
{
ShowWindowAction(WindowType.ActiveDirectoryImport);
}
private void OnImportPortScanClicked(object sender, EventArgs e)
{
ShowWindowAction(WindowType.PortScan);
}
private void OnExportFileClicked(object sender, EventArgs e)
{
_export.ExportToFile(_connectionTree.SelectedNode, _connectionsService.ConnectionTreeModel);
}
private void OnAddConnectionClicked(object sender, EventArgs e)
{
_connectionTree.AddConnection();
}
private void OnAddFolderClicked(object sender, EventArgs e)
{
_connectionTree.AddFolder();
}
private void OnSortAscendingClicked(object sender, EventArgs e)
{
_connectionTree.SortRecursive(_connectionTree.SelectedNode, ListSortDirection.Ascending);
}
private void OnSortDescendingClicked(object sender, EventArgs e)
{
_connectionTree.SortRecursive(_connectionTree.SelectedNode, ListSortDirection.Descending);
}
private void OnMoveUpClicked(object sender, EventArgs e)
{
_connectionTree.SelectedNode.Parent.PromoteChild(_connectionTree.SelectedNode);
}
private void OnMoveDownClicked(object sender, EventArgs e)
{
_connectionTree.SelectedNode.Parent.DemoteChild(_connectionTree.SelectedNode);
}
private void OnExternalToolClicked(object sender, EventArgs e)
{
StartExternalApp((ExternalTool)((ToolStripMenuItem)sender).Tag);
}
private void StartExternalApp(ExternalTool externalTool)
{
try
{
if (_connectionTree.SelectedNode.GetTreeNodeType() == TreeNodeType.Connection | _connectionTree.SelectedNode.GetTreeNodeType() == TreeNodeType.PuttySession)
externalTool.Start(_connectionTree.SelectedNode);
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionStackTrace("cMenTreeToolsExternalAppsEntry_Click failed (UI.Window.ConnectionTreeWindow)", ex);
}
}
#endregion
}
}