From 7d1a8dbf522e944bd195e2b1d813e6721a425cd2 Mon Sep 17 00:00:00 2001 From: Smurf-IV Date: Thu, 12 Dec 2019 21:09:28 +0000 Subject: [PATCH] - Make sure that if help is requested it is displayed regardless of the Config Status - More #64: Update Text in the Schedule form --- .../Controls/LogsViewerControl.Designer.cs | 49 ++++++---- .../ProtectedDrivesDisplay.Designer.cs | 25 +++-- ...rol.Designer.cs => RunControl.Designer.cs} | 16 +++- .../{LiveRunLogControl.cs => RunControl.cs} | 0 ...LiveRunLogControl.resx => RunControl.resx} | 0 Elucidate/Elucidate/Elucidate.csproj | 14 +-- .../Elucidate/Forms/ElucidateForm.Designer.cs | 21 +++- Elucidate/Elucidate/Forms/ElucidateForm.cs | 34 ++++--- Elucidate/Elucidate/Forms/LiveLog.Designer.cs | 8 +- .../Elucidate/Properties/AssemblyInfo.cs | 4 +- .../Elucidate/TabPages/CommonTab.Designer.cs | 95 +++++++++++++++---- Elucidate/Elucidate/TabPages/CommonTab.cs | 4 +- .../Elucidate/TabPages/Recover.Designer.cs | 49 +++++----- Elucidate/Elucidate/TabPages/Recover.cs | 10 +- .../Elucidate/TabPages/Schedule.Designer.cs | 36 +++---- Elucidate/Elucidate/TabPages/Schedule.resx | 26 +++++ 16 files changed, 258 insertions(+), 133 deletions(-) rename Elucidate/Elucidate/Controls/{LiveRunLogControl.Designer.cs => RunControl.Designer.cs} (93%) rename Elucidate/Elucidate/Controls/{LiveRunLogControl.cs => RunControl.cs} (100%) rename Elucidate/Elucidate/Controls/{LiveRunLogControl.resx => RunControl.resx} (100%) diff --git a/Elucidate/Elucidate/Controls/LogsViewerControl.Designer.cs b/Elucidate/Elucidate/Controls/LogsViewerControl.Designer.cs index e37565b..643599d 100644 --- a/Elucidate/Elucidate/Controls/LogsViewerControl.Designer.cs +++ b/Elucidate/Elucidate/Controls/LogsViewerControl.Designer.cs @@ -50,7 +50,7 @@ private void InitializeComponent() this.panelLogViewer.AutoSize = true; this.panelLogViewer.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.panelLogViewer.Location = new System.Drawing.Point(0, 0); - this.panelLogViewer.Margin = new System.Windows.Forms.Padding(2); + this.panelLogViewer.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.panelLogViewer.Name = "panelLogViewer"; this.panelLogViewer.Size = new System.Drawing.Size(0, 0); this.panelLogViewer.TabIndex = 4; @@ -60,6 +60,7 @@ private void InitializeComponent() this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.splitContainer1.Name = "splitContainer1"; // // splitContainer1.Panel1 @@ -74,8 +75,9 @@ private void InitializeComponent() this.splitContainer1.Panel2.Controls.Add(this.scintilla); this.splitContainer1.Panel2.RightToLeft = System.Windows.Forms.RightToLeft.No; this.splitContainer1.Panel2MinSize = 400; - this.splitContainer1.Size = new System.Drawing.Size(765, 400); + this.splitContainer1.Size = new System.Drawing.Size(1020, 492); this.splitContainer1.SplitterDistance = 250; + this.splitContainer1.SplitterWidth = 5; this.splitContainer1.TabIndex = 5; // // tableLayoutPanel1 @@ -87,12 +89,13 @@ private void InitializeComponent() this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 1); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 3; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(250, 400); + this.tableLayoutPanel1.Size = new System.Drawing.Size(250, 492); this.tableLayoutPanel1.TabIndex = 0; // // comboBoxLogType @@ -101,9 +104,10 @@ private void InitializeComponent() this.comboBoxLogType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxLogType.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.comboBoxLogType.FormattingEnabled = true; - this.comboBoxLogType.Location = new System.Drawing.Point(3, 3); + this.comboBoxLogType.Location = new System.Drawing.Point(4, 4); + this.comboBoxLogType.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.comboBoxLogType.Name = "comboBoxLogType"; - this.comboBoxLogType.Size = new System.Drawing.Size(150, 21); + this.comboBoxLogType.Size = new System.Drawing.Size(199, 24); this.comboBoxLogType.TabIndex = 1; this.comboBoxLogType.SelectedIndexChanged += new System.EventHandler(this.comboBoxLogType_SelectedIndexChanged); // @@ -112,10 +116,11 @@ private void InitializeComponent() this.listBoxViewLogFiles.Dock = System.Windows.Forms.DockStyle.Fill; this.listBoxViewLogFiles.FormattingEnabled = true; this.listBoxViewLogFiles.HorizontalScrollbar = true; - this.listBoxViewLogFiles.Location = new System.Drawing.Point(2, 65); - this.listBoxViewLogFiles.Margin = new System.Windows.Forms.Padding(2); + this.listBoxViewLogFiles.ItemHeight = 16; + this.listBoxViewLogFiles.Location = new System.Drawing.Point(3, 77); + this.listBoxViewLogFiles.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.listBoxViewLogFiles.Name = "listBoxViewLogFiles"; - this.listBoxViewLogFiles.Size = new System.Drawing.Size(247, 341); + this.listBoxViewLogFiles.Size = new System.Drawing.Size(329, 419); this.listBoxViewLogFiles.TabIndex = 8; this.listBoxViewLogFiles.SelectedIndexChanged += new System.EventHandler(this.listBoxViewLogFiles_SelectedIndexChanged); this.listBoxViewLogFiles.DoubleClick += new System.EventHandler(this.listBoxViewLogFiles_DoubleClick); @@ -125,20 +130,20 @@ private void InitializeComponent() this.panel1.Controls.Add(this.checkedFilesWithWarn); this.panel1.Controls.Add(this.checkedFilesWithError); this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(2, 29); - this.panel1.Margin = new System.Windows.Forms.Padding(2); + this.panel1.Location = new System.Drawing.Point(3, 34); + this.panel1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(247, 32); + this.panel1.Size = new System.Drawing.Size(329, 39); this.panel1.TabIndex = 9; // // checkedFilesWithWarn // this.checkedFilesWithWarn.AutoSize = true; this.checkedFilesWithWarn.Dock = System.Windows.Forms.DockStyle.Top; - this.checkedFilesWithWarn.Location = new System.Drawing.Point(0, 17); - this.checkedFilesWithWarn.Margin = new System.Windows.Forms.Padding(2); + this.checkedFilesWithWarn.Location = new System.Drawing.Point(0, 21); + this.checkedFilesWithWarn.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.checkedFilesWithWarn.Name = "checkedFilesWithWarn"; - this.checkedFilesWithWarn.Size = new System.Drawing.Size(247, 17); + this.checkedFilesWithWarn.Size = new System.Drawing.Size(329, 21); this.checkedFilesWithWarn.TabIndex = 8; this.checkedFilesWithWarn.Text = "Logs with Warnings"; this.checkedFilesWithWarn.UseVisualStyleBackColor = true; @@ -149,9 +154,9 @@ private void InitializeComponent() this.checkedFilesWithError.AutoSize = true; this.checkedFilesWithError.Dock = System.Windows.Forms.DockStyle.Top; this.checkedFilesWithError.Location = new System.Drawing.Point(0, 0); - this.checkedFilesWithError.Margin = new System.Windows.Forms.Padding(2); + this.checkedFilesWithError.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.checkedFilesWithError.Name = "checkedFilesWithError"; - this.checkedFilesWithError.Size = new System.Drawing.Size(247, 17); + this.checkedFilesWithError.Size = new System.Drawing.Size(329, 21); this.checkedFilesWithError.TabIndex = 7; this.checkedFilesWithError.Text = "Logs with Errors"; this.checkedFilesWithError.UseVisualStyleBackColor = true; @@ -161,19 +166,21 @@ private void InitializeComponent() // this.scintilla.Dock = System.Windows.Forms.DockStyle.Fill; this.scintilla.Location = new System.Drawing.Point(0, 0); + this.scintilla.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.scintilla.Name = "scintilla"; - this.scintilla.Size = new System.Drawing.Size(511, 400); + this.scintilla.Size = new System.Drawing.Size(765, 492); this.scintilla.TabIndex = 0; + this.scintilla.Text = ""; // // LogsViewerControl // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.Controls.Add(this.splitContainer1); this.Controls.Add(this.panelLogViewer); - this.Margin = new System.Windows.Forms.Padding(2); + this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.Name = "LogsViewerControl"; - this.Size = new System.Drawing.Size(765, 400); + this.Size = new System.Drawing.Size(1020, 492); this.Load += new System.EventHandler(this.LogsViewerControl_Load); this.splitContainer1.Panel1.ResumeLayout(false); this.splitContainer1.Panel2.ResumeLayout(false); diff --git a/Elucidate/Elucidate/Controls/ProtectedDrivesDisplay.Designer.cs b/Elucidate/Elucidate/Controls/ProtectedDrivesDisplay.Designer.cs index b87200c..4171773 100644 --- a/Elucidate/Elucidate/Controls/ProtectedDrivesDisplay.Designer.cs +++ b/Elucidate/Elucidate/Controls/ProtectedDrivesDisplay.Designer.cs @@ -45,8 +45,9 @@ private void InitializeComponent() this.kryptonPanel1.Controls.Add(this.driveGrid); this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.kryptonPanel1.Name = "kryptonPanel1"; - this.kryptonPanel1.Size = new System.Drawing.Size(403, 290); + this.kryptonPanel1.Size = new System.Drawing.Size(537, 357); this.kryptonPanel1.TabIndex = 0; // // driveGrid @@ -55,6 +56,7 @@ private void InitializeComponent() this.driveGrid.AllowUserToResizeColumns = false; this.driveGrid.AllowUserToResizeRows = false; this.driveGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.driveGrid.ColumnHeadersHeight = 36; this.driveGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.colPath, this.colName, @@ -63,12 +65,14 @@ private void InitializeComponent() this.driveGrid.Dock = System.Windows.Forms.DockStyle.Fill; this.driveGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; this.driveGrid.Location = new System.Drawing.Point(0, 0); + this.driveGrid.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.driveGrid.MultiSelect = false; this.driveGrid.Name = "driveGrid"; this.driveGrid.RowHeadersVisible = false; + this.driveGrid.RowHeadersWidth = 51; this.driveGrid.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; this.driveGrid.ShowEditingIcon = false; - this.driveGrid.Size = new System.Drawing.Size(403, 290); + this.driveGrid.Size = new System.Drawing.Size(537, 357); this.driveGrid.TabIndex = 0; this.driveGrid.RowsAdded += new System.Windows.Forms.DataGridViewRowsAddedEventHandler(this.driveGrid_RowsAdded); this.driveGrid.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DriveGrid_MouseDown); @@ -78,37 +82,42 @@ private void InitializeComponent() this.colPath.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; this.colPath.Frozen = true; this.colPath.HeaderText = "Path"; + this.colPath.MinimumWidth = 6; this.colPath.Name = "colPath"; this.colPath.ReadOnly = true; - this.colPath.Width = 60; + this.colPath.Width = 70; // // colName // this.colName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; this.colName.HeaderText = "Name"; + this.colName.MinimumWidth = 6; this.colName.Name = "colName"; - this.colName.Width = 68; + this.colName.Width = 82; // // colDriveSpace // this.colDriveSpace.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; this.colDriveSpace.HeaderText = "Drive Space Protected : Used : Max Available"; + this.colDriveSpace.MinimumWidth = 6; this.colDriveSpace.Name = "colDriveSpace"; // // colDetails // this.colDetails.HeaderText = "Prot : Used : Max"; + this.colDetails.MinimumWidth = 6; this.colDetails.Name = "colDetails"; - this.colDetails.Width = 124; + this.colDetails.Width = 152; // // ProtectedDrivesDisplay // this.AllowDrop = true; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.Controls.Add(this.kryptonPanel1); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.Name = "ProtectedDrivesDisplay"; - this.Size = new System.Drawing.Size(403, 290); + this.Size = new System.Drawing.Size(537, 357); ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); this.kryptonPanel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.driveGrid)).EndInit(); diff --git a/Elucidate/Elucidate/Controls/LiveRunLogControl.Designer.cs b/Elucidate/Elucidate/Controls/RunControl.Designer.cs similarity index 93% rename from Elucidate/Elucidate/Controls/LiveRunLogControl.Designer.cs rename to Elucidate/Elucidate/Controls/RunControl.Designer.cs index b570d7a..5525616 100644 --- a/Elucidate/Elucidate/Controls/LiveRunLogControl.Designer.cs +++ b/Elucidate/Elucidate/Controls/RunControl.Designer.cs @@ -84,8 +84,10 @@ private void InitializeComponent() this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; this.toolStripStatusLabel1.Size = new System.Drawing.Size(205, 30); this.toolStripStatusLabel1.StateCommon.ShortText.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.toolStripStatusLabel1.StateCommon.ShortText.ImageStyle = ComponentFactory.Krypton.Toolkit.PaletteImageStyle.Inherit; this.toolStripStatusLabel1.StateCommon.ShortText.TextH = ComponentFactory.Krypton.Toolkit.PaletteRelativeAlign.Near; this.toolStripStatusLabel1.StateCommon.ShortText.TextV = ComponentFactory.Krypton.Toolkit.PaletteRelativeAlign.Near; + this.toolStripStatusLabel1.StateCommon.ShortText.Trim = ComponentFactory.Krypton.Toolkit.PaletteTextTrim.Inherit; this.toolStripStatusLabel1.TabIndex = 0; this.toolStripStatusLabel1.TabStop = false; this.toolStripStatusLabel1.Values.Text = "2000-01-01 00:00:00Z"; @@ -116,6 +118,8 @@ private void InitializeComponent() this.runWithoutCaptureMenuItem.Name = "runWithoutCaptureMenuItem"; this.runWithoutCaptureMenuItem.Size = new System.Drawing.Size(199, 34); this.runWithoutCaptureMenuItem.StateCommon.ShortText.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.runWithoutCaptureMenuItem.StateCommon.ShortText.ImageStyle = ComponentFactory.Krypton.Toolkit.PaletteImageStyle.Inherit; + this.runWithoutCaptureMenuItem.StateCommon.ShortText.Trim = ComponentFactory.Krypton.Toolkit.PaletteTextTrim.Inherit; this.runWithoutCaptureMenuItem.TabIndex = 3; this.runWithoutCaptureMenuItem.Values.Text = "Run without capture"; this.runWithoutCaptureMenuItem.Visible = false; @@ -132,7 +136,9 @@ private void InitializeComponent() this.checkBoxDisplayOutput.Name = "checkBoxDisplayOutput"; this.checkBoxDisplayOutput.Size = new System.Drawing.Size(152, 34); this.checkBoxDisplayOutput.StateCommon.ShortText.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.checkBoxDisplayOutput.StateCommon.ShortText.ImageStyle = ComponentFactory.Krypton.Toolkit.PaletteImageStyle.Inherit; this.checkBoxDisplayOutput.StateCommon.ShortText.TextH = ComponentFactory.Krypton.Toolkit.PaletteRelativeAlign.Near; + this.checkBoxDisplayOutput.StateCommon.ShortText.Trim = ComponentFactory.Krypton.Toolkit.PaletteTextTrim.Inherit; this.checkBoxDisplayOutput.TabIndex = 2; this.checkBoxDisplayOutput.Values.Text = "Display Output"; this.checkBoxDisplayOutput.MouseLeave += new System.EventHandler(this.checkBoxDisplayOutput_MouseLeave); @@ -156,6 +162,8 @@ private void InitializeComponent() this.comboBoxProcessStatus.StateCommon.ComboBox.Content.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.comboBoxProcessStatus.StateCommon.ComboBox.Content.TextH = ComponentFactory.Krypton.Toolkit.PaletteRelativeAlign.Near; this.comboBoxProcessStatus.StateCommon.Item.Content.ShortText.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.comboBoxProcessStatus.StateCommon.Item.Content.ShortText.ImageStyle = ComponentFactory.Krypton.Toolkit.PaletteImageStyle.Inherit; + this.comboBoxProcessStatus.StateCommon.Item.Content.ShortText.Trim = ComponentFactory.Krypton.Toolkit.PaletteTextTrim.Inherit; this.comboBoxProcessStatus.TabIndex = 1; this.comboBoxProcessStatus.Text = "Stopped"; this.comboBoxProcessStatus.SelectedIndexChanged += new System.EventHandler(this.comboBoxProcessStatus_SelectedIndexChanged); @@ -208,6 +216,8 @@ private void InitializeComponent() this.checkBoxCommandLineOptions.Name = "checkBoxCommandLineOptions"; this.checkBoxCommandLineOptions.Size = new System.Drawing.Size(338, 27); this.checkBoxCommandLineOptions.StateCommon.ShortText.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.checkBoxCommandLineOptions.StateCommon.ShortText.ImageStyle = ComponentFactory.Krypton.Toolkit.PaletteImageStyle.Inherit; + this.checkBoxCommandLineOptions.StateCommon.ShortText.Trim = ComponentFactory.Krypton.Toolkit.PaletteTextTrim.Inherit; this.checkBoxCommandLineOptions.TabIndex = 0; this.checkBoxCommandLineOptions.ToolTipValues.Description = "Will be unchecked after command, so the next command does not include this by acc" + "ident"; @@ -232,10 +242,10 @@ private void InitializeComponent() this.kryptonPanel1.Size = new System.Drawing.Size(858, 72); this.kryptonPanel1.TabIndex = 4; // - // LiveRunLogControl + // RunControl // - this.AutoScaleDimensions = new System.Drawing.SizeF(11F, 24F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.Controls.Add(this.kryptonPanel1); this.DoubleBuffered = true; this.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); diff --git a/Elucidate/Elucidate/Controls/LiveRunLogControl.cs b/Elucidate/Elucidate/Controls/RunControl.cs similarity index 100% rename from Elucidate/Elucidate/Controls/LiveRunLogControl.cs rename to Elucidate/Elucidate/Controls/RunControl.cs diff --git a/Elucidate/Elucidate/Controls/LiveRunLogControl.resx b/Elucidate/Elucidate/Controls/RunControl.resx similarity index 100% rename from Elucidate/Elucidate/Controls/LiveRunLogControl.resx rename to Elucidate/Elucidate/Controls/RunControl.resx diff --git a/Elucidate/Elucidate/Elucidate.csproj b/Elucidate/Elucidate/Elucidate.csproj index dfe7e7a..1516b57 100644 --- a/Elucidate/Elucidate/Elucidate.csproj +++ b/Elucidate/Elucidate/Elucidate.csproj @@ -30,7 +30,7 @@ AssemblyVersionAttribute Properties\AssemblyInfo.cs - 2020.7.1003.4 + 2020.7.1013.5 False SettingsVersion None @@ -146,11 +146,11 @@ - + UserControl - - LiveRunLogControl.cs + + RunControl.cs @@ -221,8 +221,8 @@ Component - - LiveRunLogControl.cs + + RunControl.cs LiveLog.cs @@ -322,7 +322,7 @@ - +