mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
493 lines
21 KiB
C#
493 lines
21 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
using mRemoteNG.App;
|
|
using mRemoteNG.Connection;
|
|
using mRemoteNG.Container;
|
|
using mRemoteNG.Security;
|
|
using mRemoteNG.Tree;
|
|
using mRemoteNG.UI.Forms;
|
|
using mRemoteNG.UI.Window;
|
|
|
|
namespace mRemoteNG.UI.Menu
|
|
{
|
|
public class MainFileMenu : ToolStripMenuItem
|
|
{
|
|
private ToolStripMenuItem _mMenFileNew;
|
|
private ToolStripMenuItem _mMenFileLoad;
|
|
private ToolStripMenuItem _mMenFileSave;
|
|
private ToolStripMenuItem _mMenFileSaveAs;
|
|
private ToolStripSeparator _mMenFileSep1;
|
|
private ToolStripMenuItem _mMenFileExit;
|
|
private ToolStripMenuItem _mMenFileDuplicate;
|
|
private ToolStripSeparator _mMenFileSep2;
|
|
private ToolStripMenuItem _mMenFileNewConnection;
|
|
private ToolStripMenuItem _mMenFileNewFolder;
|
|
private ToolStripSeparator _mMenFileSep3;
|
|
private ToolStripSeparator _mMenFileSep4;
|
|
private ToolStripMenuItem _mMenFileDelete;
|
|
private ToolStripMenuItem _mMenFileRename;
|
|
private ToolStripSeparator _mMenFileSep5;
|
|
private ToolStripMenuItem _mMenFileExport;
|
|
private ToolStripMenuItem _mMenFileImportFromFile;
|
|
private ToolStripMenuItem _mMenFileImportFromActiveDirectory;
|
|
private ToolStripMenuItem _mMenFileImportFromPortScan;
|
|
private ToolStripMenuItem _mMenFileImport;
|
|
private ToolStripMenuItem _mMenReconnectAll;
|
|
|
|
public ConnectionTreeWindow TreeWindow { get; set; }
|
|
public IConnectionInitiator ConnectionInitiator { get; set; }
|
|
|
|
public MainFileMenu()
|
|
{
|
|
Initialize();
|
|
}
|
|
|
|
private void Initialize()
|
|
{
|
|
_mMenFileNewConnection = new ToolStripMenuItem();
|
|
_mMenFileNewFolder = new ToolStripMenuItem();
|
|
_mMenFileSep1 = new ToolStripSeparator();
|
|
_mMenFileNew = new ToolStripMenuItem();
|
|
_mMenFileLoad = new ToolStripMenuItem();
|
|
_mMenFileSave = new ToolStripMenuItem();
|
|
_mMenFileSaveAs = new ToolStripMenuItem();
|
|
_mMenFileSep2 = new ToolStripSeparator();
|
|
_mMenFileDelete = new ToolStripMenuItem();
|
|
_mMenFileRename = new ToolStripMenuItem();
|
|
_mMenFileDuplicate = new ToolStripMenuItem();
|
|
_mMenFileSep4 = new ToolStripSeparator();
|
|
_mMenReconnectAll = new ToolStripMenuItem();
|
|
_mMenFileSep3 = new ToolStripSeparator();
|
|
_mMenFileImport = new ToolStripMenuItem();
|
|
_mMenFileImportFromFile = new ToolStripMenuItem();
|
|
_mMenFileImportFromActiveDirectory = new ToolStripMenuItem();
|
|
_mMenFileImportFromPortScan = new ToolStripMenuItem();
|
|
_mMenFileExport = new ToolStripMenuItem();
|
|
_mMenFileSep5 = new ToolStripSeparator();
|
|
_mMenFileExit = new ToolStripMenuItem();
|
|
|
|
//
|
|
// mMenFile
|
|
//
|
|
DropDownItems.AddRange(new ToolStripItem[]
|
|
{
|
|
_mMenFileNewConnection,
|
|
_mMenFileNewFolder,
|
|
_mMenFileSep1,
|
|
_mMenFileNew,
|
|
_mMenFileLoad,
|
|
_mMenFileSave,
|
|
_mMenFileSaveAs,
|
|
_mMenFileSep2,
|
|
_mMenFileDelete,
|
|
_mMenFileRename,
|
|
_mMenFileDuplicate,
|
|
_mMenFileSep4,
|
|
_mMenReconnectAll,
|
|
_mMenFileSep3,
|
|
_mMenFileImport,
|
|
_mMenFileExport,
|
|
_mMenFileSep5,
|
|
_mMenFileExit
|
|
});
|
|
Name = "mMenFile";
|
|
Size = new System.Drawing.Size(37, 20);
|
|
Text = Language.strMenuFile;
|
|
//DropDownOpening += mMenFile_DropDownOpening;
|
|
DropDownClosed += OnDropDownClosed;
|
|
//
|
|
// mMenFileNewConnection
|
|
//
|
|
_mMenFileNewConnection.Image = Resources.Connection_Add;
|
|
_mMenFileNewConnection.Name = "mMenFileNewConnection";
|
|
_mMenFileNewConnection.ShortcutKeys = Keys.Control | Keys.N;
|
|
_mMenFileNewConnection.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileNewConnection.Text = Language.strNewConnection;
|
|
_mMenFileNewConnection.Click += mMenFileNewConnection_Click;
|
|
//
|
|
// mMenFileNewFolder
|
|
//
|
|
_mMenFileNewFolder.Image = Resources.Folder_Add;
|
|
_mMenFileNewFolder.Name = "mMenFileNewFolder";
|
|
_mMenFileNewFolder.ShortcutKeys = (Keys.Control | Keys.Shift)
|
|
| Keys.N;
|
|
_mMenFileNewFolder.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileNewFolder.Text = Language.strNewFolder;
|
|
_mMenFileNewFolder.Click += mMenFileNewFolder_Click;
|
|
//
|
|
// mMenFileSep1
|
|
//
|
|
_mMenFileSep1.Name = "mMenFileSep1";
|
|
_mMenFileSep1.Size = new System.Drawing.Size(278, 6);
|
|
//
|
|
// mMenFileNew
|
|
//
|
|
_mMenFileNew.Image = Resources.Connections_New;
|
|
_mMenFileNew.Name = "mMenFileNew";
|
|
_mMenFileNew.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileNew.Text = Language.strMenuNewConnectionFile;
|
|
_mMenFileNew.Click += mMenFileNew_Click;
|
|
//
|
|
// mMenFileLoad
|
|
//
|
|
_mMenFileLoad.Image = Resources.Connections_Load;
|
|
_mMenFileLoad.Name = "mMenFileLoad";
|
|
_mMenFileLoad.ShortcutKeys = Keys.Control | Keys.O;
|
|
_mMenFileLoad.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileLoad.Text = Language.strMenuOpenConnectionFile;
|
|
_mMenFileLoad.Click += mMenFileLoad_Click;
|
|
//
|
|
// mMenFileSave
|
|
//
|
|
_mMenFileSave.Image = Resources.Connections_Save;
|
|
_mMenFileSave.Name = "mMenFileSave";
|
|
_mMenFileSave.ShortcutKeys = Keys.Control | Keys.S;
|
|
_mMenFileSave.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileSave.Text = Language.strMenuSaveConnectionFile;
|
|
_mMenFileSave.Click += mMenFileSave_Click;
|
|
//
|
|
// mMenFileSaveAs
|
|
//
|
|
_mMenFileSaveAs.Image = Resources.Connections_SaveAs;
|
|
_mMenFileSaveAs.Name = "mMenFileSaveAs";
|
|
_mMenFileSaveAs.ShortcutKeys = (Keys.Control | Keys.Shift)
|
|
| Keys.S;
|
|
_mMenFileSaveAs.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileSaveAs.Text = Language.strMenuSaveConnectionFileAs;
|
|
_mMenFileSaveAs.Click += mMenFileSaveAs_Click;
|
|
//
|
|
// mMenFileSep2
|
|
//
|
|
_mMenFileSep2.Name = "mMenFileSep2";
|
|
_mMenFileSep2.Size = new System.Drawing.Size(278, 6);
|
|
//
|
|
// mMenFileDelete
|
|
//
|
|
_mMenFileDelete.Image = Resources.Delete;
|
|
_mMenFileDelete.Name = "mMenFileDelete";
|
|
_mMenFileDelete.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileDelete.Text = Language.strDelete;
|
|
_mMenFileDelete.Click += mMenFileDelete_Click;
|
|
//
|
|
// mMenFileRename
|
|
//
|
|
_mMenFileRename.Image = Resources.Rename;
|
|
_mMenFileRename.Name = "mMenFileRename";
|
|
_mMenFileRename.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileRename.Text = Language.strRename;
|
|
_mMenFileRename.Click += mMenFileRename_Click;
|
|
//
|
|
// mMenFileDuplicate
|
|
//
|
|
_mMenFileDuplicate.Image = Resources.page_copy;
|
|
_mMenFileDuplicate.Name = "mMenFileDuplicate";
|
|
_mMenFileDuplicate.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileDuplicate.Text = Language.strDuplicate;
|
|
_mMenFileDuplicate.Click += mMenFileDuplicate_Click;
|
|
//
|
|
// mMenFileSep4
|
|
//
|
|
_mMenFileSep4.Name = "mMenFileSep4";
|
|
_mMenFileSep4.Size = new System.Drawing.Size(278, 6);
|
|
//
|
|
// mMenReconnectAll
|
|
//
|
|
_mMenReconnectAll.Image = Resources.Refresh;
|
|
_mMenReconnectAll.Name = "mMenReconnectAll";
|
|
_mMenReconnectAll.Size = new System.Drawing.Size(281, 22);
|
|
_mMenReconnectAll.Text = Language.strReconnectAllConnections;
|
|
_mMenReconnectAll.Click += mMenReconnectAll_Click;
|
|
//
|
|
// mMenFileSep3
|
|
//
|
|
_mMenFileSep3.Name = "mMenFileSep3";
|
|
_mMenFileSep3.Size = new System.Drawing.Size(278, 6);
|
|
//
|
|
// mMenFileImport
|
|
//
|
|
_mMenFileImport.DropDownItems.AddRange(new ToolStripItem[]
|
|
{
|
|
_mMenFileImportFromFile,
|
|
_mMenFileImportFromActiveDirectory,
|
|
_mMenFileImportFromPortScan
|
|
});
|
|
_mMenFileImport.Name = "mMenFileImport";
|
|
_mMenFileImport.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileImport.Text = Language.strImportMenuItem;
|
|
//
|
|
// mMenFileImportFromFile
|
|
//
|
|
_mMenFileImportFromFile.Name = "mMenFileImportFromFile";
|
|
_mMenFileImportFromFile.Size = new System.Drawing.Size(235, 22);
|
|
_mMenFileImportFromFile.Text = Language.strImportFromFileMenuItem;
|
|
_mMenFileImportFromFile.Click += mMenFileImportFromFile_Click;
|
|
//
|
|
// mMenFileImportFromActiveDirectory
|
|
//
|
|
_mMenFileImportFromActiveDirectory.Name = "mMenFileImportFromActiveDirectory";
|
|
_mMenFileImportFromActiveDirectory.Size = new System.Drawing.Size(235, 22);
|
|
_mMenFileImportFromActiveDirectory.Text = Language.strImportAD;
|
|
_mMenFileImportFromActiveDirectory.Click += mMenFileImportFromActiveDirectory_Click;
|
|
//
|
|
// mMenFileImportFromPortScan
|
|
//
|
|
_mMenFileImportFromPortScan.Name = "mMenFileImportFromPortScan";
|
|
_mMenFileImportFromPortScan.Size = new System.Drawing.Size(235, 22);
|
|
_mMenFileImportFromPortScan.Text = Language.strImportPortScan;
|
|
_mMenFileImportFromPortScan.Click += mMenFileImportFromPortScan_Click;
|
|
//
|
|
// mMenFileExport
|
|
//
|
|
_mMenFileExport.Name = "mMenFileExport";
|
|
_mMenFileExport.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileExport.Text = Language.strExportToFileMenuItem;
|
|
_mMenFileExport.Click += mMenFileExport_Click;
|
|
//
|
|
// mMenFileSep5
|
|
//
|
|
_mMenFileSep5.Name = "mMenFileSep5";
|
|
_mMenFileSep5.Size = new System.Drawing.Size(278, 6);
|
|
//
|
|
// mMenFileExit
|
|
//
|
|
_mMenFileExit.Image = Resources.Quit;
|
|
_mMenFileExit.Name = "mMenFileExit";
|
|
_mMenFileExit.ShortcutKeys = Keys.Alt | Keys.F4;
|
|
_mMenFileExit.Size = new System.Drawing.Size(281, 22);
|
|
_mMenFileExit.Text = Language.strMenuExit;
|
|
_mMenFileExit.Click += mMenFileExit_Click;
|
|
}
|
|
|
|
public void ApplyLanguage()
|
|
{
|
|
Text = Language.strMenuFile;
|
|
_mMenFileNewConnection.Text = Language.strNewConnection;
|
|
_mMenFileNewFolder.Text = Language.strNewFolder;
|
|
_mMenFileNew.Text = Language.strMenuNewConnectionFile;
|
|
_mMenFileLoad.Text = Language.strMenuOpenConnectionFile;
|
|
_mMenFileSave.Text = Language.strMenuSaveConnectionFile;
|
|
_mMenFileSaveAs.Text = Language.strMenuSaveConnectionFileAs;
|
|
_mMenFileImport.Text = Language.strImportMenuItem;
|
|
_mMenFileImportFromFile.Text = Language.strImportFromFileMenuItem;
|
|
_mMenFileImportFromActiveDirectory.Text = Language.strImportAD;
|
|
_mMenFileImportFromPortScan.Text = Language.strImportPortScan;
|
|
_mMenFileExport.Text = Language.strExportToFileMenuItem;
|
|
_mMenFileExit.Text = Language.strMenuExit;
|
|
}
|
|
|
|
#region File
|
|
|
|
internal void mMenFile_DropDownOpening(object sender, EventArgs e)
|
|
{
|
|
var selectedNodeType = TreeWindow.SelectedNode?.GetTreeNodeType();
|
|
// ReSharper disable once SwitchStatementMissingSomeCases
|
|
switch (selectedNodeType)
|
|
{
|
|
case TreeNodeType.Root:
|
|
_mMenFileNewConnection.Enabled = true;
|
|
_mMenFileNewFolder.Enabled = true;
|
|
_mMenFileDelete.Enabled = false;
|
|
_mMenFileRename.Enabled = true;
|
|
_mMenFileDuplicate.Enabled = false;
|
|
_mMenReconnectAll.Enabled = true;
|
|
_mMenFileDelete.Text = Language.strMenuDelete;
|
|
_mMenFileRename.Text = Language.strMenuRenameFolder;
|
|
_mMenFileDuplicate.Text = Language.strMenuDuplicate;
|
|
_mMenReconnectAll.Text = Language.strMenuReconnectAll;
|
|
break;
|
|
case TreeNodeType.Container:
|
|
_mMenFileNewConnection.Enabled = true;
|
|
_mMenFileNewFolder.Enabled = true;
|
|
_mMenFileDelete.Enabled = true;
|
|
_mMenFileRename.Enabled = true;
|
|
_mMenFileDuplicate.Enabled = true;
|
|
_mMenReconnectAll.Enabled = true;
|
|
_mMenFileDelete.Text = Language.strMenuDeleteFolder;
|
|
_mMenFileRename.Text = Language.strMenuRenameFolder;
|
|
_mMenFileDuplicate.Text = Language.strMenuDuplicateFolder;
|
|
_mMenReconnectAll.Text = Language.strMenuReconnectAll;
|
|
break;
|
|
case TreeNodeType.Connection:
|
|
_mMenFileNewConnection.Enabled = true;
|
|
_mMenFileNewFolder.Enabled = true;
|
|
_mMenFileDelete.Enabled = true;
|
|
_mMenFileRename.Enabled = true;
|
|
_mMenFileDuplicate.Enabled = true;
|
|
_mMenReconnectAll.Enabled = true;
|
|
_mMenFileDelete.Text = Language.strMenuDeleteConnection;
|
|
_mMenFileRename.Text = Language.strMenuRenameConnection;
|
|
_mMenFileDuplicate.Text = Language.strMenuDuplicateConnection;
|
|
_mMenReconnectAll.Text = Language.strMenuReconnectAll;
|
|
break;
|
|
case TreeNodeType.PuttyRoot:
|
|
case TreeNodeType.PuttySession:
|
|
_mMenFileNewConnection.Enabled = false;
|
|
_mMenFileNewFolder.Enabled = false;
|
|
_mMenFileDelete.Enabled = false;
|
|
_mMenFileRename.Enabled = false;
|
|
_mMenFileDuplicate.Enabled = false;
|
|
_mMenReconnectAll.Enabled = true;
|
|
_mMenFileDelete.Text = Language.strMenuDelete;
|
|
_mMenFileRename.Text = Language.strMenuRename;
|
|
_mMenFileDuplicate.Text = Language.strMenuDuplicate;
|
|
_mMenReconnectAll.Text = Language.strMenuReconnectAll;
|
|
break;
|
|
default:
|
|
_mMenFileNewConnection.Enabled = true;
|
|
_mMenFileNewFolder.Enabled = true;
|
|
_mMenFileDelete.Enabled = false;
|
|
_mMenFileRename.Enabled = false;
|
|
_mMenFileDuplicate.Enabled = false;
|
|
_mMenReconnectAll.Enabled = true;
|
|
_mMenFileDelete.Text = Language.strMenuDelete;
|
|
_mMenFileRename.Text = Language.strMenuRename;
|
|
_mMenFileDuplicate.Text = Language.strMenuDuplicate;
|
|
_mMenReconnectAll.Text = Language.strMenuReconnectAll;
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void OnDropDownClosed(object sender, EventArgs eventArgs)
|
|
{
|
|
_mMenFileNewConnection.Enabled = true;
|
|
_mMenFileNewFolder.Enabled = true;
|
|
_mMenFileDelete.Enabled = true;
|
|
_mMenFileRename.Enabled = true;
|
|
_mMenFileDuplicate.Enabled = true;
|
|
_mMenReconnectAll.Enabled = true;
|
|
}
|
|
|
|
private void mMenFileNewConnection_Click(object sender, EventArgs e)
|
|
{
|
|
TreeWindow.ConnectionTree.AddConnection();
|
|
}
|
|
|
|
private void mMenFileNewFolder_Click(object sender, EventArgs e)
|
|
{
|
|
TreeWindow.ConnectionTree.AddFolder();
|
|
}
|
|
|
|
private void mMenFileNew_Click(object sender, EventArgs e)
|
|
{
|
|
using (var saveFileDialog = DialogFactory.ConnectionsSaveAsDialog())
|
|
{
|
|
if (saveFileDialog.ShowDialog() != DialogResult.OK)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Runtime.ConnectionsService.NewConnectionsFile(saveFileDialog.FileName);
|
|
}
|
|
}
|
|
|
|
private void mMenFileLoad_Click(object sender, EventArgs e)
|
|
{
|
|
if (Runtime.ConnectionsService.IsConnectionsFileLoaded)
|
|
{
|
|
var msgBoxResult = MessageBox.Show(Language.strSaveConnectionsFileBeforeOpeningAnother,
|
|
Language.strSave, MessageBoxButtons.YesNoCancel);
|
|
// ReSharper disable once SwitchStatementMissingSomeCases
|
|
switch (msgBoxResult)
|
|
{
|
|
case DialogResult.Yes:
|
|
Runtime.ConnectionsService.SaveConnections();
|
|
break;
|
|
case DialogResult.Cancel:
|
|
return;
|
|
}
|
|
}
|
|
|
|
Runtime.LoadConnections(true);
|
|
}
|
|
|
|
private void mMenFileSave_Click(object sender, EventArgs e)
|
|
{
|
|
Runtime.ConnectionsService.SaveConnectionsAsync();
|
|
}
|
|
|
|
private void mMenFileSaveAs_Click(object sender, EventArgs e)
|
|
{
|
|
using (var saveFileDialog = DialogFactory.ConnectionsSaveAsDialog())
|
|
{
|
|
if (saveFileDialog.ShowDialog(FrmMain.Default) != DialogResult.OK)
|
|
return;
|
|
|
|
var newFileName = saveFileDialog.FileName;
|
|
|
|
Runtime.ConnectionsService.SaveConnections(Runtime.ConnectionsService.ConnectionTreeModel, false,
|
|
new SaveFilter(), newFileName);
|
|
|
|
if (newFileName == Runtime.ConnectionsService.GetDefaultStartupConnectionFileName())
|
|
{
|
|
Settings.Default.LoadConsFromCustomLocation = false;
|
|
}
|
|
else
|
|
{
|
|
Settings.Default.LoadConsFromCustomLocation = true;
|
|
Settings.Default.CustomConsPath = newFileName;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void mMenFileDelete_Click(object sender, EventArgs e)
|
|
{
|
|
TreeWindow.ConnectionTree.DeleteSelectedNode();
|
|
}
|
|
|
|
private void mMenFileRename_Click(object sender, EventArgs e)
|
|
{
|
|
TreeWindow.ConnectionTree.RenameSelectedNode();
|
|
}
|
|
|
|
private void mMenFileDuplicate_Click(object sender, EventArgs e)
|
|
{
|
|
TreeWindow.ConnectionTree.DuplicateSelectedNode();
|
|
}
|
|
|
|
private void mMenReconnectAll_Click(object sender, EventArgs e)
|
|
{
|
|
if (Runtime.WindowList == null || Runtime.WindowList.Count == 0) return;
|
|
foreach (BaseWindow window in Runtime.WindowList)
|
|
{
|
|
if (!(window is ConnectionWindow connectionWindow))
|
|
return;
|
|
|
|
connectionWindow.ReconnectAll(ConnectionInitiator);
|
|
}
|
|
}
|
|
|
|
private void mMenFileImportFromFile_Click(object sender, EventArgs e)
|
|
{
|
|
var selectedNode = TreeWindow.SelectedNode;
|
|
ContainerInfo importDestination;
|
|
if (selectedNode == null)
|
|
importDestination = Runtime.ConnectionsService.ConnectionTreeModel.RootNodes.First();
|
|
else
|
|
importDestination = selectedNode as ContainerInfo ?? selectedNode.Parent;
|
|
Import.ImportFromFile(importDestination);
|
|
}
|
|
|
|
private void mMenFileImportFromActiveDirectory_Click(object sender, EventArgs e)
|
|
{
|
|
Windows.Show(WindowType.ActiveDirectoryImport);
|
|
}
|
|
|
|
private void mMenFileImportFromPortScan_Click(object sender, EventArgs e)
|
|
{
|
|
Windows.Show(WindowType.PortScan);
|
|
}
|
|
|
|
private void mMenFileExport_Click(object sender, EventArgs e)
|
|
{
|
|
Export.ExportToFile(Windows.TreeForm.SelectedNode, Runtime.ConnectionsService.ConnectionTreeModel);
|
|
}
|
|
|
|
private void mMenFileExit_Click(object sender, EventArgs e)
|
|
{
|
|
Shutdown.Quit();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |