Files
mRemoteNG/mRemoteV1/UI/Menu/MainFileMenu.cs
2018-03-03 12:05:38 -06:00

498 lines
21 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using mRemoteNG.App;
using mRemoteNG.App.Info;
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 WindowList WindowList { get; set; }
public Windows Windows { get; set; }
public ConnectionTreeWindow TreeWindow { get; set; }
public IConnectionInitiator ConnectionInitiator { get; set; }
public Export Export { get; set; }
public Shutdown Shutdown { 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;
//
// 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 = "Delete...";
_mMenFileDelete.Click += mMenFileDelete_Click;
//
// mMenFileRename
//
_mMenFileRename.Image = Resources.Rename;
_mMenFileRename.Name = "mMenFileRename";
_mMenFileRename.Size = new System.Drawing.Size(281, 22);
_mMenFileRename.Text = "Rename";
_mMenFileRename.Click += mMenFileRename_Click;
//
// mMenFileDuplicate
//
_mMenFileDuplicate.Image = Resources.page_copy;
_mMenFileDuplicate.Name = "mMenFileDuplicate";
_mMenFileDuplicate.Size = new System.Drawing.Size(281, 22);
_mMenFileDuplicate.Text = "Duplicate";
_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 = "Reconnect All Connections";
_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;
}
#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 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)
{
var saveFileDialog = 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 = new SaveFileDialog())
{
saveFileDialog.CheckPathExists = true;
saveFileDialog.InitialDirectory = ConnectionsFileInfo.DefaultConnectionsPath;
saveFileDialog.FileName = ConnectionsFileInfo.DefaultConnectionsFile;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.Filter = $@"{Language.strFiltermRemoteXML}|*.xml|{Language.strFilterAll}|*.*";
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 (WindowList.Count == 0)
return;
foreach (BaseWindow window in WindowList)
{
var connectionWindow = window as ConnectionWindow;
if (connectionWindow == null)
return;
var icList = new List<InterfaceControl>();
foreach (Crownwood.Magic.Controls.TabPage tab in connectionWindow.TabController.TabPages)
{
var tag = tab.Tag as InterfaceControl;
if (tag != null)
{
icList.Add(tag);
}
}
foreach (var i in icList)
{
i.Protocol.Close();
ConnectionInitiator.OpenConnection(i.Info, ConnectionInfo.Force.DoNotJump);
}
// throw it on the garbage collector
// ReSharper disable once RedundantAssignment
icList = null;
}
}
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();
}
public static SaveFileDialog ConnectionsSaveAsDialog()
{
return new SaveFileDialog
{
CheckPathExists = true,
InitialDirectory = ConnectionsFileInfo.DefaultConnectionsPath,
FileName = ConnectionsFileInfo.DefaultConnectionsFile,
OverwritePrompt = true,
Filter = Language.strFiltermRemoteXML + @"|*.xml|" + Language.strFilterAll + @"|*.*"
};
}
#endregion
}
}