mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
820 lines
37 KiB
C#
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
|
|
}
|
|
} |