diff --git a/mRemoteV1/UI/Forms/frmMain.Designer.cs b/mRemoteV1/UI/Forms/frmMain.Designer.cs
index b13f83183..5f57d27fe 100644
--- a/mRemoteV1/UI/Forms/frmMain.Designer.cs
+++ b/mRemoteV1/UI/Forms/frmMain.Designer.cs
@@ -34,14 +34,6 @@ namespace mRemoteNG.UI.Forms
this.mMenFile = new System.Windows.Forms.ToolStripMenuItem();
this.mMenView = new System.Windows.Forms.ToolStripMenuItem();
this.mMenTools = new System.Windows.Forms.ToolStripMenuItem();
- this.credentialManagerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.mMenToolsSSHTransfer = new System.Windows.Forms.ToolStripMenuItem();
- this.mMenToolsUVNCSC = new System.Windows.Forms.ToolStripMenuItem();
- this.mMenToolsExternalApps = new System.Windows.Forms.ToolStripMenuItem();
- this.mMenToolsPortScan = new System.Windows.Forms.ToolStripMenuItem();
- this.mMenToolsSep1 = new System.Windows.Forms.ToolStripSeparator();
- this.mMenToolsComponentsCheck = new System.Windows.Forms.ToolStripMenuItem();
- this.mMenToolsOptions = new System.Windows.Forms.ToolStripMenuItem();
this.mMenInfo = new System.Windows.Forms.ToolStripMenuItem();
this.mMenInfoHelp = new System.Windows.Forms.ToolStripMenuItem();
this.mMenInfoSep1 = new System.Windows.Forms.ToolStripSeparator();
@@ -50,8 +42,8 @@ namespace mRemoteNG.UI.Forms
this.mMenInfoForum = new System.Windows.Forms.ToolStripMenuItem();
this.mMenInfoBugReport = new System.Windows.Forms.ToolStripMenuItem();
this.ToolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
- this.mMenToolsUpdate = new System.Windows.Forms.ToolStripMenuItem();
this.mMenInfoSep2 = new System.Windows.Forms.ToolStripSeparator();
+ this.mMenToolsUpdate = new System.Windows.Forms.ToolStripMenuItem();
this.mMenInfoAbout = new System.Windows.Forms.ToolStripMenuItem();
this.mMenSep3 = new System.Windows.Forms.ToolStripSeparator();
this.lblQuickConnect = new System.Windows.Forms.ToolStripLabel();
@@ -59,11 +51,11 @@ namespace mRemoteNG.UI.Forms
this.tsContainer = new System.Windows.Forms.ToolStripContainer();
this.tsExternalTools = new System.Windows.Forms.ToolStrip();
this.cMenExtAppsToolbar = new System.Windows.Forms.ContextMenuStrip(this.components);
- this.cMenToolbarShowText = new System.Windows.Forms.ToolStripMenuItem();
this.tsQuickConnect = new System.Windows.Forms.ToolStrip();
this.btnQuickConnect = new mRemoteNG.UI.Controls.ToolStripSplitButton();
this.mnuQuickConnectProtocol = new System.Windows.Forms.ContextMenuStrip(this.components);
this.btnConnections = new System.Windows.Forms.ToolStripDropDownButton();
+ this.cMenToolbarShowText = new System.Windows.Forms.ToolStripMenuItem();
this.mnuConnections = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tmrAutoSave = new System.Windows.Forms.Timer(this.components);
this.msMain.SuspendLayout();
@@ -92,7 +84,6 @@ namespace mRemoteNG.UI.Forms
this.msMain.Dock = System.Windows.Forms.DockStyle.None;
this.msMain.GripMargin = new System.Windows.Forms.Padding(0);
this.msMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.mMenTools,
this.mMenInfo});
this.msMain.Location = new System.Drawing.Point(3, 0);
this.msMain.Name = "msMain";
@@ -101,84 +92,15 @@ namespace mRemoteNG.UI.Forms
this.msMain.Stretch = false;
this.msMain.TabIndex = 16;
this.msMain.Text = "Main Toolbar";
-
//
- // mMenTools
+ // cMenToolbarShowText
//
- this.mMenTools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.credentialManagerToolStripMenuItem,
- this.mMenToolsSSHTransfer,
- this.mMenToolsUVNCSC,
- this.mMenToolsExternalApps,
- this.mMenToolsPortScan,
- this.mMenToolsSep1,
- this.mMenToolsComponentsCheck,
- this.mMenToolsOptions});
- this.mMenTools.Name = "mMenTools";
- this.mMenTools.Size = new System.Drawing.Size(48, 20);
- this.mMenTools.Text = "&Tools";
- //
- // credentialManagerToolStripMenuItem
- //
- this.credentialManagerToolStripMenuItem.Image = global::mRemoteNG.Resources.key;
- this.credentialManagerToolStripMenuItem.Name = "credentialManagerToolStripMenuItem";
- this.credentialManagerToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
- this.credentialManagerToolStripMenuItem.Text = "Credential Manager";
- this.credentialManagerToolStripMenuItem.Click += new System.EventHandler(this.credentialManagerToolStripMenuItem_Click);
- //
- // mMenToolsSSHTransfer
- //
- this.mMenToolsSSHTransfer.Image = global::mRemoteNG.Resources.SSHTransfer;
- this.mMenToolsSSHTransfer.Name = "mMenToolsSSHTransfer";
- this.mMenToolsSSHTransfer.Size = new System.Drawing.Size(184, 22);
- this.mMenToolsSSHTransfer.Text = "SSH File Transfer";
- this.mMenToolsSSHTransfer.Click += new System.EventHandler(this.mMenToolsSSHTransfer_Click);
- //
- // mMenToolsUVNCSC
- //
- this.mMenToolsUVNCSC.Image = global::mRemoteNG.Resources.UVNC_SC;
- this.mMenToolsUVNCSC.Name = "mMenToolsUVNCSC";
- this.mMenToolsUVNCSC.Size = new System.Drawing.Size(184, 22);
- this.mMenToolsUVNCSC.Text = "UltraVNC SingleClick";
- this.mMenToolsUVNCSC.Visible = false;
- this.mMenToolsUVNCSC.Click += new System.EventHandler(this.mMenToolsUVNCSC_Click);
- //
- // mMenToolsExternalApps
- //
- this.mMenToolsExternalApps.Image = global::mRemoteNG.Resources.ExtApp;
- this.mMenToolsExternalApps.Name = "mMenToolsExternalApps";
- this.mMenToolsExternalApps.Size = new System.Drawing.Size(184, 22);
- this.mMenToolsExternalApps.Text = "External Applications";
- this.mMenToolsExternalApps.Click += new System.EventHandler(this.mMenToolsExternalApps_Click);
- //
- // mMenToolsPortScan
- //
- this.mMenToolsPortScan.Image = global::mRemoteNG.Resources.PortScan;
- this.mMenToolsPortScan.Name = "mMenToolsPortScan";
- this.mMenToolsPortScan.Size = new System.Drawing.Size(184, 22);
- this.mMenToolsPortScan.Text = "Port Scan";
- this.mMenToolsPortScan.Click += new System.EventHandler(this.mMenToolsPortScan_Click);
- //
- // mMenToolsSep1
- //
- this.mMenToolsSep1.Name = "mMenToolsSep1";
- this.mMenToolsSep1.Size = new System.Drawing.Size(181, 6);
- //
- // mMenToolsComponentsCheck
- //
- this.mMenToolsComponentsCheck.Image = global::mRemoteNG.Resources.cog_error;
- this.mMenToolsComponentsCheck.Name = "mMenToolsComponentsCheck";
- this.mMenToolsComponentsCheck.Size = new System.Drawing.Size(184, 22);
- this.mMenToolsComponentsCheck.Text = "Components Check";
- this.mMenToolsComponentsCheck.Click += new System.EventHandler(this.mMenToolsComponentsCheck_Click);
- //
- // mMenToolsOptions
- //
- this.mMenToolsOptions.Image = global::mRemoteNG.Resources.Options;
- this.mMenToolsOptions.Name = "mMenToolsOptions";
- this.mMenToolsOptions.Size = new System.Drawing.Size(184, 22);
- this.mMenToolsOptions.Text = "Options";
- this.mMenToolsOptions.Click += new System.EventHandler(this.mMenToolsOptions_Click);
+ this.cMenToolbarShowText.Checked = true;
+ this.cMenToolbarShowText.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.cMenToolbarShowText.Name = "cMenToolbarShowText";
+ this.cMenToolbarShowText.Size = new System.Drawing.Size(128, 22);
+ this.cMenToolbarShowText.Text = "Show Text";
+ this.cMenToolbarShowText.Click += new System.EventHandler(this.cMenToolbarShowText_Click);
//
// mMenInfo
//
@@ -324,20 +246,11 @@ namespace mRemoteNG.UI.Forms
//
// cMenExtAppsToolbar
//
- this.cMenExtAppsToolbar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.cMenToolbarShowText});
+ //this.cMenExtAppsToolbar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ //this.cMenToolbarShowText});
this.cMenExtAppsToolbar.Name = "cMenToolbar";
this.cMenExtAppsToolbar.Size = new System.Drawing.Size(129, 26);
//
- // cMenToolbarShowText
- //
- this.cMenToolbarShowText.Checked = true;
- this.cMenToolbarShowText.CheckState = System.Windows.Forms.CheckState.Checked;
- this.cMenToolbarShowText.Name = "cMenToolbarShowText";
- this.cMenToolbarShowText.Size = new System.Drawing.Size(128, 22);
- this.cMenToolbarShowText.Text = "Show Text";
- this.cMenToolbarShowText.Click += new System.EventHandler(this.cMenToolbarShowText_Click);
- //
// tsQuickConnect
//
this.tsQuickConnect.Dock = System.Windows.Forms.DockStyle.None;
@@ -432,36 +345,28 @@ namespace mRemoteNG.UI.Forms
internal System.Windows.Forms.ToolStripMenuItem mMenTools;
internal System.Windows.Forms.ToolStripLabel lblQuickConnect;
internal System.Windows.Forms.ToolStripMenuItem mMenInfo;
- internal System.Windows.Forms.ToolStripSeparator mMenToolsSep1;
- internal System.Windows.Forms.ToolStripMenuItem mMenToolsOptions;
internal System.Windows.Forms.ToolStripMenuItem mMenInfoHelp;
- internal System.Windows.Forms.ToolStripMenuItem mMenInfoWebsite;
+ internal System.Windows.Forms.ToolStripMenuItem cMenToolbarShowText;
+ internal System.Windows.Forms.ToolStripMenuItem mMenInfoWebsite;
internal System.Windows.Forms.ToolStripSeparator mMenInfoSep1;
internal System.Windows.Forms.ToolStripMenuItem mMenInfoAbout;
internal QuickConnectComboBox cmbQuickConnect;
- internal System.Windows.Forms.ToolStripMenuItem mMenToolsSSHTransfer;
internal System.Windows.Forms.ToolStripContainer tsContainer;
- internal System.Windows.Forms.ToolStripMenuItem mMenToolsExternalApps;
internal System.Windows.Forms.Timer tmrAutoSave;
internal System.Windows.Forms.ToolStrip tsExternalTools;
internal System.Windows.Forms.ContextMenuStrip cMenExtAppsToolbar;
- internal System.Windows.Forms.ToolStripMenuItem cMenToolbarShowText;
- internal System.Windows.Forms.ToolStripMenuItem mMenToolsPortScan;
internal System.Windows.Forms.ToolStrip tsQuickConnect;
internal System.Windows.Forms.ToolStripSeparator mMenSep3;
internal System.Windows.Forms.ToolStripMenuItem mMenInfoDonate;
- internal ToolStripSplitButton btnQuickConnect;
- internal System.Windows.Forms.ToolStripMenuItem mMenToolsUVNCSC;
- internal System.Windows.Forms.ToolStripMenuItem mMenToolsComponentsCheck;
+ internal System.Windows.Forms.ToolStripMenuItem mMenToolsUpdate;
+ internal ToolStripSplitButton btnQuickConnect;
internal System.Windows.Forms.ToolStripSeparator mMenInfoSep2;
internal System.Windows.Forms.ToolStripMenuItem mMenInfoBugReport;
internal System.Windows.Forms.ToolStripSeparator ToolStripSeparator2;
internal System.Windows.Forms.ToolStripMenuItem mMenInfoForum;
- internal System.Windows.Forms.ToolStripMenuItem mMenToolsUpdate;
internal System.Windows.Forms.ContextMenuStrip mnuQuickConnectProtocol;
internal System.Windows.Forms.ToolStripDropDownButton btnConnections;
internal System.Windows.Forms.ContextMenuStrip mnuConnections;
private System.ComponentModel.IContainer components;
- private System.Windows.Forms.ToolStripMenuItem credentialManagerToolStripMenuItem;
}
}
diff --git a/mRemoteV1/UI/Forms/frmMain.cs b/mRemoteV1/UI/Forms/frmMain.cs
index e582f4e63..110b73d5d 100644
--- a/mRemoteV1/UI/Forms/frmMain.cs
+++ b/mRemoteV1/UI/Forms/frmMain.cs
@@ -170,18 +170,12 @@ namespace mRemoteNG.UI.Forms
msMain.Items.Add(new MainFileMenu(ConnectionTreeWindow, _connectionInitiator));
msMain.Items.Add(new ViewMenu(tsExternalTools, tsQuickConnect, _fullscreen, this));
+ msMain.Items.Add(new ToolsMenu(this, _credentialManager));
}
private void ApplyLanguage()
{
- mMenTools.Text = Language.strMenuTools;
- mMenToolsSSHTransfer.Text = Language.strMenuSSHFileTransfer;
- mMenToolsExternalApps.Text = Language.strMenuExternalTools;
- mMenToolsPortScan.Text = Language.strMenuPortScan;
- mMenToolsComponentsCheck.Text = Language.strComponentsCheck;
mMenToolsUpdate.Text = Language.strMenuCheckForUpdates;
- mMenToolsOptions.Text = Language.strMenuOptions;
-
mMenInfo.Text = Language.strMenuHelp;
mMenInfoHelp.Text = Language.strMenuHelpContents;
mMenInfoForum.Text = Language.strMenuSupportForum;
@@ -401,53 +395,6 @@ namespace mRemoteNG.UI.Forms
#endregion
#region Menu
- #region Tools
- private void credentialManagerToolStripMenuItem_Click(object sender, EventArgs e)
- {
- var credentialManagerForm = new CredentialManagerForm(_credentialManager)
- {
- DeletionConfirmer = new CredentialDeletionMsgBoxConfirmer(MessageBox.Show)
- };
- credentialManagerForm.CenterOnTarget(this);
- credentialManagerForm.Show();
- }
-
- private void mMenToolsUpdate_Click(object sender, EventArgs e)
- {
- Windows.Show(WindowType.Update);
- }
-
- private void mMenToolsSSHTransfer_Click(object sender, EventArgs e)
- {
- Windows.Show(WindowType.SSHTransfer);
- }
-
- private void mMenToolsUVNCSC_Click(object sender, EventArgs e)
- {
- Windows.Show(WindowType.UltraVNCSC);
- }
-
- private void mMenToolsExternalApps_Click(object sender, EventArgs e)
- {
- Windows.Show(WindowType.ExternalApps);
- }
-
- private void mMenToolsPortScan_Click(object sender, EventArgs e)
- {
- Windows.Show(WindowType.PortScan);
- }
-
- private void mMenToolsComponentsCheck_Click(object sender, EventArgs e)
- {
- Windows.Show(WindowType.ComponentsCheck);
- }
-
- private void mMenToolsOptions_Click(object sender, EventArgs e)
- {
- Windows.Show(WindowType.Options);
- }
- #endregion
-
#region Quick Connect
private void PopulateQuickConnectProtocolMenu()
{
@@ -523,6 +470,10 @@ namespace mRemoteNG.UI.Forms
#endregion
#region Info
+ private void mMenToolsUpdate_Click(object sender, EventArgs e)
+ {
+ Windows.Show(WindowType.Update);
+ }
private void mMenInfoHelp_Click(object sender, EventArgs e)
{
Windows.Show(WindowType.Help);
diff --git a/mRemoteV1/UI/Menu/HelpMenu.cs b/mRemoteV1/UI/Menu/HelpMenu.cs
new file mode 100644
index 000000000..284e251d3
--- /dev/null
+++ b/mRemoteV1/UI/Menu/HelpMenu.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace mRemoteNG.UI.Menu
+{
+ class HelpMenu
+ {
+ }
+}
diff --git a/mRemoteV1/UI/Menu/ToolsMenu.cs b/mRemoteV1/UI/Menu/ToolsMenu.cs
new file mode 100644
index 000000000..f51abc14a
--- /dev/null
+++ b/mRemoteV1/UI/Menu/ToolsMenu.cs
@@ -0,0 +1,161 @@
+using System;
+using System.Windows.Forms;
+using mRemoteNG.App;
+using mRemoteNG.Credential;
+using mRemoteNG.UI.Forms;
+
+namespace mRemoteNG.UI.Menu
+{
+ public class ToolsMenu : ToolStripMenuItem
+ {
+ private ToolStripSeparator _mMenToolsSep1;
+ private ToolStripMenuItem _mMenToolsOptions;
+ private ToolStripMenuItem _mMenToolsSshTransfer;
+ private ToolStripMenuItem _mMenToolsExternalApps;
+ private ToolStripMenuItem _mMenToolsPortScan;
+ private ToolStripMenuItem _mMenToolsUvncsc;
+ private ToolStripMenuItem _mMenToolsComponentsCheck;
+ private ToolStripMenuItem _credentialManagerToolStripMenuItem;
+ private readonly CredentialManager _credentialManager;
+ private readonly Form _form;
+
+ public ToolsMenu(Form form, CredentialManager credentialManager)
+ {
+ _form = form;
+ _credentialManager = credentialManager;
+ Initialize();
+ }
+
+ private void Initialize()
+ {
+ _credentialManagerToolStripMenuItem = new ToolStripMenuItem();
+ _mMenToolsSshTransfer = new ToolStripMenuItem();
+ _mMenToolsUvncsc = new ToolStripMenuItem();
+ _mMenToolsExternalApps = new ToolStripMenuItem();
+ _mMenToolsPortScan = new ToolStripMenuItem();
+ _mMenToolsSep1 = new ToolStripSeparator();
+ _mMenToolsComponentsCheck = new ToolStripMenuItem();
+ _mMenToolsOptions = new ToolStripMenuItem();
+
+ //
+ // mMenTools
+ //
+ DropDownItems.AddRange(new ToolStripItem[] {
+ _credentialManagerToolStripMenuItem,
+ _mMenToolsSshTransfer,
+ _mMenToolsUvncsc,
+ _mMenToolsExternalApps,
+ _mMenToolsPortScan,
+ _mMenToolsSep1,
+ _mMenToolsComponentsCheck,
+ _mMenToolsOptions});
+ Name = "mMenTools";
+ Size = new System.Drawing.Size(48, 20);
+ Text = Language.strMenuTools;
+ //
+ // credentialManagerToolStripMenuItem
+ //
+ _credentialManagerToolStripMenuItem.Image = Resources.key;
+ _credentialManagerToolStripMenuItem.Name = "credentialManagerToolStripMenuItem";
+ _credentialManagerToolStripMenuItem.Size = new System.Drawing.Size(184, 22);
+ _credentialManagerToolStripMenuItem.Text = "Credential Manager";
+ _credentialManagerToolStripMenuItem.Click += credentialManagerToolStripMenuItem_Click;
+ //
+ // mMenToolsSSHTransfer
+ //
+ _mMenToolsSshTransfer.Image = Resources.SSHTransfer;
+ _mMenToolsSshTransfer.Name = "mMenToolsSSHTransfer";
+ _mMenToolsSshTransfer.Size = new System.Drawing.Size(184, 22);
+ _mMenToolsSshTransfer.Text = Language.strMenuSSHFileTransfer;
+ _mMenToolsSshTransfer.Click += mMenToolsSSHTransfer_Click;
+ //
+ // mMenToolsUVNCSC
+ //
+ _mMenToolsUvncsc.Image = Resources.UVNC_SC;
+ _mMenToolsUvncsc.Name = "mMenToolsUVNCSC";
+ _mMenToolsUvncsc.Size = new System.Drawing.Size(184, 22);
+ _mMenToolsUvncsc.Text = "UltraVNC SingleClick";
+ _mMenToolsUvncsc.Visible = false;
+ _mMenToolsUvncsc.Click += mMenToolsUVNCSC_Click;
+ //
+ // mMenToolsExternalApps
+ //
+ _mMenToolsExternalApps.Image = Resources.ExtApp;
+ _mMenToolsExternalApps.Name = "mMenToolsExternalApps";
+ _mMenToolsExternalApps.Size = new System.Drawing.Size(184, 22);
+ _mMenToolsExternalApps.Text = Language.strMenuExternalTools;
+ _mMenToolsExternalApps.Click += mMenToolsExternalApps_Click;
+ //
+ // mMenToolsPortScan
+ //
+ _mMenToolsPortScan.Image = Resources.PortScan;
+ _mMenToolsPortScan.Name = "mMenToolsPortScan";
+ _mMenToolsPortScan.Size = new System.Drawing.Size(184, 22);
+ _mMenToolsPortScan.Text = Language.strMenuPortScan;
+ _mMenToolsPortScan.Click += mMenToolsPortScan_Click;
+ //
+ // mMenToolsSep1
+ //
+ _mMenToolsSep1.Name = "mMenToolsSep1";
+ _mMenToolsSep1.Size = new System.Drawing.Size(181, 6);
+ //
+ // mMenToolsComponentsCheck
+ //
+ _mMenToolsComponentsCheck.Image = Resources.cog_error;
+ _mMenToolsComponentsCheck.Name = "mMenToolsComponentsCheck";
+ _mMenToolsComponentsCheck.Size = new System.Drawing.Size(184, 22);
+ _mMenToolsComponentsCheck.Text = Language.strComponentsCheck;
+ _mMenToolsComponentsCheck.Click += mMenToolsComponentsCheck_Click;
+ //
+ // mMenToolsOptions
+ //
+ _mMenToolsOptions.Image = Resources.Options;
+ _mMenToolsOptions.Name = "mMenToolsOptions";
+ _mMenToolsOptions.Size = new System.Drawing.Size(184, 22);
+ _mMenToolsOptions.Text = Language.strMenuOptions;
+ _mMenToolsOptions.Click += mMenToolsOptions_Click;
+ }
+
+ #region Tools
+ private void credentialManagerToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var credentialManagerForm = new CredentialManagerForm(_credentialManager)
+ {
+ DeletionConfirmer = new CredentialDeletionMsgBoxConfirmer(MessageBox.Show)
+ };
+ credentialManagerForm.CenterOnTarget(_form);
+ credentialManagerForm.Show();
+ }
+
+ private void mMenToolsSSHTransfer_Click(object sender, EventArgs e)
+ {
+ Windows.Show(WindowType.SSHTransfer);
+ }
+
+ private void mMenToolsUVNCSC_Click(object sender, EventArgs e)
+ {
+ Windows.Show(WindowType.UltraVNCSC);
+ }
+
+ private void mMenToolsExternalApps_Click(object sender, EventArgs e)
+ {
+ Windows.Show(WindowType.ExternalApps);
+ }
+
+ private void mMenToolsPortScan_Click(object sender, EventArgs e)
+ {
+ Windows.Show(WindowType.PortScan);
+ }
+
+ private void mMenToolsComponentsCheck_Click(object sender, EventArgs e)
+ {
+ Windows.Show(WindowType.ComponentsCheck);
+ }
+
+ private void mMenToolsOptions_Click(object sender, EventArgs e)
+ {
+ Windows.Show(WindowType.Options);
+ }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj
index a0de2459c..01e435b01 100644
--- a/mRemoteV1/mRemoteV1.csproj
+++ b/mRemoteV1/mRemoteV1.csproj
@@ -506,10 +506,14 @@
Component
+
Component
+
+ Component
+
Component