From db1f5bee2225aac6ce7d71aa049673b68cc8cc8f Mon Sep 17 00:00:00 2001 From: "VKMTHD\\franzjosefkober" <franz.josef.kober@ivt.tugraz.at> Date: Tue, 31 May 2022 14:32:12 +0200 Subject: [PATCH] added additional buttons to view selected FL Curve files --- VECTO/GUI/IEPCForm.Designer.vb | 80 +- VECTO/GUI/IEPCForm.resx | 5 +- VECTO/GUI/IEPCForm.vb | 1493 +++++++++++++++++--------------- 3 files changed, 843 insertions(+), 735 deletions(-) diff --git a/VECTO/GUI/IEPCForm.Designer.vb b/VECTO/GUI/IEPCForm.Designer.vb index 901c96aba2..c8f7250a2f 100644 --- a/VECTO/GUI/IEPCForm.Designer.vb +++ b/VECTO/GUI/IEPCForm.Designer.vb @@ -22,6 +22,7 @@ Partial Class IEPCForm 'Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(IEPCForm)) Me.btFLCurveFile1 = New System.Windows.Forms.Button() Me.tbThermalOverload = New System.Windows.Forms.TextBox() @@ -37,6 +38,7 @@ Partial Class IEPCForm Me.FlowLayoutPanel9 = New System.Windows.Forms.FlowLayoutPanel() Me.Label44 = New System.Windows.Forms.Label() Me.tbFLCurve1 = New System.Windows.Forms.TextBox() + Me.btShowFLCurve1 = New System.Windows.Forms.Button() Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() Me.Label11 = New System.Windows.Forms.Label() Me.Label4 = New System.Windows.Forms.Label() @@ -73,6 +75,7 @@ Partial Class IEPCForm Me.Label28 = New System.Windows.Forms.Label() Me.tbFLCurve2 = New System.Windows.Forms.TextBox() Me.btFLCurveFile2 = New System.Windows.Forms.Button() + Me.btShowFLCurve2 = New System.Windows.Forms.Button() Me.TableLayoutPanel4 = New System.Windows.Forms.TableLayoutPanel() Me.Label17 = New System.Windows.Forms.Label() Me.Label18 = New System.Windows.Forms.Label() @@ -139,6 +142,9 @@ Partial Class IEPCForm Me.Label10 = New System.Windows.Forms.Label() Me.StatusStrip1 = New System.Windows.Forms.StatusStrip() Me.LbStatus = New System.Windows.Forms.ToolStripStatusLabel() + Me.CmOpenFile = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.OpenWithToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ShowInFolderToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.tcVoltageLevels.SuspendLayout Me.tpFirstVoltageLevel.SuspendLayout Me.FlowLayoutPanel9.SuspendLayout @@ -165,6 +171,7 @@ Partial Class IEPCForm Me.FlowLayoutPanel7.SuspendLayout Me.FlowLayoutPanel8.SuspendLayout Me.StatusStrip1.SuspendLayout + Me.CmOpenFile.SuspendLayout Me.SuspendLayout ' 'btFLCurveFile1 @@ -284,6 +291,7 @@ Partial Class IEPCForm Me.FlowLayoutPanel9.Controls.Add(Me.Label44) Me.FlowLayoutPanel9.Controls.Add(Me.tbFLCurve1) Me.FlowLayoutPanel9.Controls.Add(Me.btFLCurveFile1) + Me.FlowLayoutPanel9.Controls.Add(Me.btShowFLCurve1) Me.FlowLayoutPanel9.Location = New System.Drawing.Point(6, 94) Me.FlowLayoutPanel9.Name = "FlowLayoutPanel9" Me.FlowLayoutPanel9.Size = New System.Drawing.Size(496, 26) @@ -309,6 +317,17 @@ Partial Class IEPCForm Me.tbFLCurve1.Size = New System.Drawing.Size(277, 20) Me.tbFLCurve1.TabIndex = 60 ' + 'btShowFLCurve1 + ' + Me.btShowFLCurve1.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small + Me.btShowFLCurve1.Location = New System.Drawing.Point(449, 1) + Me.btShowFLCurve1.Margin = New System.Windows.Forms.Padding(0, 1, 0, 0) + Me.btShowFLCurve1.Name = "btShowFLCurve1" + Me.btShowFLCurve1.Size = New System.Drawing.Size(24, 24) + Me.btShowFLCurve1.TabIndex = 85 + Me.btShowFLCurve1.TabStop = false + Me.btShowFLCurve1.UseVisualStyleBackColor = true + ' 'TableLayoutPanel1 ' Me.TableLayoutPanel1.ColumnCount = 7 @@ -556,7 +575,7 @@ Partial Class IEPCForm ' Me.Label47.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) Me.Label47.AutoSize = true - Me.Label47.Location = New System.Drawing.Point(189, 126) + Me.Label47.Location = New System.Drawing.Point(189, 127) Me.Label47.Name = "Label47" Me.Label47.Size = New System.Drawing.Size(106, 13) Me.Label47.TabIndex = 6 @@ -575,7 +594,7 @@ Partial Class IEPCForm Me.lvPowerMap1.Location = New System.Drawing.Point(3, 3) Me.lvPowerMap1.MultiSelect = false Me.lvPowerMap1.Name = "lvPowerMap1" - Me.lvPowerMap1.Size = New System.Drawing.Size(292, 120) + Me.lvPowerMap1.Size = New System.Drawing.Size(292, 121) Me.lvPowerMap1.TabIndex = 7 Me.lvPowerMap1.TabStop = false Me.lvPowerMap1.UseCompatibleStateImageBehavior = false @@ -636,7 +655,7 @@ Partial Class IEPCForm ' Me.Label5.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) Me.Label5.AutoSize = true - Me.Label5.Location = New System.Drawing.Point(189, 126) + Me.Label5.Location = New System.Drawing.Point(189, 127) Me.Label5.Name = "Label5" Me.Label5.Size = New System.Drawing.Size(106, 13) Me.Label5.TabIndex = 6 @@ -655,7 +674,7 @@ Partial Class IEPCForm Me.lvPowerMap2.Location = New System.Drawing.Point(3, 3) Me.lvPowerMap2.MultiSelect = false Me.lvPowerMap2.Name = "lvPowerMap2" - Me.lvPowerMap2.Size = New System.Drawing.Size(292, 120) + Me.lvPowerMap2.Size = New System.Drawing.Size(292, 121) Me.lvPowerMap2.TabIndex = 7 Me.lvPowerMap2.TabStop = false Me.lvPowerMap2.UseCompatibleStateImageBehavior = false @@ -676,6 +695,7 @@ Partial Class IEPCForm Me.FlowLayoutPanel10.Controls.Add(Me.Label28) Me.FlowLayoutPanel10.Controls.Add(Me.tbFLCurve2) Me.FlowLayoutPanel10.Controls.Add(Me.btFLCurveFile2) + Me.FlowLayoutPanel10.Controls.Add(Me.btShowFLCurve2) Me.FlowLayoutPanel10.Location = New System.Drawing.Point(6, 94) Me.FlowLayoutPanel10.Name = "FlowLayoutPanel10" Me.FlowLayoutPanel10.Size = New System.Drawing.Size(496, 26) @@ -712,6 +732,17 @@ Partial Class IEPCForm Me.btFLCurveFile2.TabIndex = 29 Me.btFLCurveFile2.UseVisualStyleBackColor = true ' + 'btShowFLCurve2 + ' + Me.btShowFLCurve2.Image = Global.TUGraz.VECTO.My.Resources.Resources.application_export_icon_small + Me.btShowFLCurve2.Location = New System.Drawing.Point(449, 1) + Me.btShowFLCurve2.Margin = New System.Windows.Forms.Padding(0, 1, 0, 0) + Me.btShowFLCurve2.Name = "btShowFLCurve2" + Me.btShowFLCurve2.Size = New System.Drawing.Size(24, 24) + Me.btShowFLCurve2.TabIndex = 85 + Me.btShowFLCurve2.TabStop = false + Me.btShowFLCurve2.UseVisualStyleBackColor = true + ' 'TableLayoutPanel4 ' Me.TableLayoutPanel4.Anchor = System.Windows.Forms.AnchorStyles.None @@ -1000,9 +1031,9 @@ Partial Class IEPCForm ' Me.FlowLayoutPanel2.Controls.Add(Me.btAddGear) Me.FlowLayoutPanel2.Controls.Add(Me.btRemoveGear) - Me.FlowLayoutPanel2.Location = New System.Drawing.Point(3, 127) + Me.FlowLayoutPanel2.Location = New System.Drawing.Point(3, 128) Me.FlowLayoutPanel2.Name = "FlowLayoutPanel2" - Me.FlowLayoutPanel2.Size = New System.Drawing.Size(61, 29) + Me.FlowLayoutPanel2.Size = New System.Drawing.Size(61, 28) Me.FlowLayoutPanel2.TabIndex = 54 ' 'btAddGear @@ -1027,7 +1058,7 @@ Partial Class IEPCForm ' Me.Label6.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) Me.Label6.AutoSize = true - Me.Label6.Location = New System.Drawing.Point(191, 124) + Me.Label6.Location = New System.Drawing.Point(191, 125) Me.Label6.Name = "Label6" Me.Label6.Size = New System.Drawing.Size(106, 13) Me.Label6.TabIndex = 6 @@ -1046,7 +1077,7 @@ Partial Class IEPCForm Me.lvGear.Location = New System.Drawing.Point(3, 3) Me.lvGear.MultiSelect = false Me.lvGear.Name = "lvGear" - Me.lvGear.Size = New System.Drawing.Size(294, 118) + Me.lvGear.Size = New System.Drawing.Size(294, 119) Me.lvGear.TabIndex = 7 Me.lvGear.TabStop = false Me.lvGear.UseCompatibleStateImageBehavior = false @@ -1108,7 +1139,7 @@ Partial Class IEPCForm Me.lvDragCurve.Location = New System.Drawing.Point(3, 3) Me.lvDragCurve.MultiSelect = false Me.lvDragCurve.Name = "lvDragCurve" - Me.lvDragCurve.Size = New System.Drawing.Size(294, 118) + Me.lvDragCurve.Size = New System.Drawing.Size(294, 119) Me.lvDragCurve.TabIndex = 77 Me.lvDragCurve.TabStop = false Me.lvDragCurve.UseCompatibleStateImageBehavior = false @@ -1128,9 +1159,9 @@ Partial Class IEPCForm ' Me.FlowLayoutPanel11.Controls.Add(Me.btAddDragCurve) Me.FlowLayoutPanel11.Controls.Add(Me.btRemoveDragCurve) - Me.FlowLayoutPanel11.Location = New System.Drawing.Point(3, 127) + Me.FlowLayoutPanel11.Location = New System.Drawing.Point(3, 128) Me.FlowLayoutPanel11.Name = "FlowLayoutPanel11" - Me.FlowLayoutPanel11.Size = New System.Drawing.Size(61, 29) + Me.FlowLayoutPanel11.Size = New System.Drawing.Size(61, 28) Me.FlowLayoutPanel11.TabIndex = 54 ' 'btAddDragCurve @@ -1155,7 +1186,7 @@ Partial Class IEPCForm ' Me.Label7.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles) Me.Label7.AutoSize = true - Me.Label7.Location = New System.Drawing.Point(191, 124) + Me.Label7.Location = New System.Drawing.Point(191, 125) Me.Label7.Name = "Label7" Me.Label7.Size = New System.Drawing.Size(106, 13) Me.Label7.TabIndex = 6 @@ -1390,6 +1421,25 @@ Partial Class IEPCForm Me.LbStatus.Size = New System.Drawing.Size(39, 17) Me.LbStatus.Text = "Status" ' + 'CmOpenFile + ' + Me.CmOpenFile.ImageScalingSize = New System.Drawing.Size(24, 24) + Me.CmOpenFile.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.OpenWithToolStripMenuItem, Me.ShowInFolderToolStripMenuItem}) + Me.CmOpenFile.Name = "CmOpenFile" + Me.CmOpenFile.Size = New System.Drawing.Size(153, 48) + ' + 'OpenWithToolStripMenuItem + ' + Me.OpenWithToolStripMenuItem.Name = "OpenWithToolStripMenuItem" + Me.OpenWithToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.OpenWithToolStripMenuItem.Text = "Open with ..." + ' + 'ShowInFolderToolStripMenuItem + ' + Me.ShowInFolderToolStripMenuItem.Name = "ShowInFolderToolStripMenuItem" + Me.ShowInFolderToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.ShowInFolderToolStripMenuItem.Text = "Show in Folder" + ' 'IEPCForm ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!) @@ -1459,6 +1509,7 @@ Partial Class IEPCForm Me.FlowLayoutPanel8.PerformLayout Me.StatusStrip1.ResumeLayout(false) Me.StatusStrip1.PerformLayout + Me.CmOpenFile.ResumeLayout(false) Me.ResumeLayout(false) Me.PerformLayout @@ -1579,4 +1630,9 @@ End Sub Friend WithEvents ColumnHeader5 As ColumnHeader Friend WithEvents FlowLayoutPanel11 As FlowLayoutPanel Friend WithEvents Label7 As Label + Friend WithEvents btShowFLCurve1 As Button + Friend WithEvents btShowFLCurve2 As Button + Friend WithEvents CmOpenFile As ContextMenuStrip + Friend WithEvents OpenWithToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ShowInFolderToolStripMenuItem As ToolStripMenuItem End Class diff --git a/VECTO/GUI/IEPCForm.resx b/VECTO/GUI/IEPCForm.resx index ceb8b403c0..50021e8dee 100644 --- a/VECTO/GUI/IEPCForm.resx +++ b/VECTO/GUI/IEPCForm.resx @@ -160,8 +160,11 @@ <metadata name="StatusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <value>231, 20</value> </metadata> + <metadata name="CmOpenFile.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>462, 18</value> + </metadata> <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> - <value>25</value> + <value>62</value> </metadata> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <value> diff --git a/VECTO/GUI/IEPCForm.vb b/VECTO/GUI/IEPCForm.vb index c323b6b9db..7c779d2925 100644 --- a/VECTO/GUI/IEPCForm.vb +++ b/VECTO/GUI/IEPCForm.vb @@ -5,735 +5,784 @@ Imports TUGraz.VectoCore.InputData.FileIO.JSON Public Class IEPCForm - Public JobDir As String = "" - Private _iepcFilePath as String = "" - Private _powerMapDlg As IEPCInputDialog - Private _dragCurveDlg As IEPCInputDialog - Private _gearDlg As IEPCGearInputDialog - Private _flcFilePath1 as String - Private _flcFilePath2 as String - Private _changed as Boolean - - Private Sub IEPCForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load - _powerMapDlg = New IEPCInputDialog(IEPCDialogType.PowerMapDialog) - _dragCurveDlg = New IEPCInputDialog(IEPCDialogType.DragCurveDialog) - _gearDlg = New IEPCGearInputDialog() - End Sub - - Public Sub ReadIEPCFile(file As String) - Dim inputData = JSONInputDataFactory.ReadIEPCEngineeringInputData(file, True) - - tbModel.Text = inputData.Model - tbInertia.Text = inputData.Inertia.ToGUIFormat() - cbDifferentialIncluded.Checked = inputData.DifferentialIncluded - cbDesignTypeWheelMotor.Checked = inputData.DesignTypeWheelMotor - tbNumberOfDesignTypeWheelMotor.Text = inputData.NrOfDesignTypeWheelMotorMeasured.Value.ToGUIFormat() - tbThermalOverload.Text = inputData.OverloadRecoveryFactor.ToGUIFormat() - - Dim voltageLevel = inputData.VoltageLevels.First() - SetFirstVoltageLevel(voltageLevel) - voltageLevel = inputData.VoltageLevels.Last() - SetSecondaryVoltageLevel(voltageLevel) - SetGearEntries(inputData.Gears) - SetDragEntries(inputData.DragCurves) - _iepcFilePath = file - - LbStatus.Text = "" - _changed = False - End Sub - - Private Sub SetFirstVoltageLevel(voltageLevel As IElectricMotorVoltageLevel) - tbVoltage1.Text = voltageLevel.VoltageLevel.ToGUIFormat() - tbContinousTorque1.Text = voltageLevel.ContinuousTorque.ToGUIFormat() - tbContinousTorqueSpeed1.Text = voltageLevel.ContinuousTorqueSpeed.AsRPM.ToGUIFormat() - tbOverloadTime1.Text = voltageLevel.OverloadTime.ToGUIFormat() - tbOverloadTorque1.Text = voltageLevel.OverloadTorque.ToGUIFormat() - tboverloadTorqueSpeed1.Text = voltageLevel.OverloadTestSpeed.AsRPM.ToGUIFormat() - tbFLCurve1.Text = voltageLevel.FullLoadCurve.Source - SetPowerMapEntries(_lvPowerMap1, voltageLevel.PowerMap) - End Sub - - Private Sub SetSecondaryVoltageLevel(voltageLevel As IElectricMotorVoltageLevel) - tbVoltage2.Text = voltageLevel.VoltageLevel.ToGUIFormat() - tbContinousTorque2.Text = voltageLevel.ContinuousTorque.ToGUIFormat() - tbContinousTorqueSpeed2.Text = voltageLevel.ContinuousTorqueSpeed.AsRPM.ToGUIFormat() - tbOverloadTime2.Text = voltageLevel.OverloadTime.ToGUIFormat() - tbOverloadTorque2.Text = voltageLevel.OverloadTorque.ToGUIFormat() - tbOverloadTorqueSpeed2.Text = voltageLevel.OverloadTestSpeed.AsRPM.ToGUIFormat() - tbFLCurve2.Text = voltageLevel.FullLoadCurve.Source - SetPowerMapEntries(_lvPowerMap2, voltageLevel.PowerMap) - End Sub - - Private Sub SetGearEntries(entries As IList(Of IGearEntry)) - For Each entry As IGearEntry In entries - Dim listEntry = CreateListViewItem(entry.Ratio, entry.MaxOutputShaftTorque, entry.MaxOutputShaftSpeed) - _lvGear.Items.Add(listEntry) - Next - End Sub - - Private Sub SetDragEntries(entries As IList(Of IDragCurve)) - For Each entry As IDragCurve In entries - Dim listEntry = CreateListViewItem(entry.Gear.Value, entry.DragCurve.Source) - _lvDragCurve.Items.Add(listEntry) - Next - End Sub - - Private Sub SetPowerMapEntries(powerMapListView As ListView, entries As IList(Of IElectricMotorPowerMap)) - For Each entry As IElectricMotorPowerMap In entries - Dim listEntry = CreateListViewItem(entry.Gear, entry.PowerMap.Source) - powerMapListView.Items.Add(listEntry) - Next - End Sub - - Private Function CreateListViewItem(axleNumber As Integer, filepath As String) As ListViewItem - Dim retVal As New ListViewItem - retVal.SubItems(0).Text = axleNumber.ToGUIFormat() - retVal.SubItems.Add(filepath) - Return retVal - End Function - - Private Function CreateListViewItem(ratio As Double, outputShaftTorque As NewtonMeter, outputShaftSpeed As PerSecond) As ListViewItem - Dim retVal As New ListViewItem - retVal.SubItems(0).Text = ratio.ToGUIFormat() - retVal.SubItems.Add(outputShaftTorque?.ToGUIFormat()) - retVal.SubItems.Add(outputShaftSpeed?.ToGUIFormat()) - Return retVal - End Function - - Private Function CreateListViewItem(ratio As Double, outputShaftTorque As Double?, outputShaftSpeed As Double?) As ListViewItem - - Dim retVal As New ListViewItem - retVal.SubItems(0).Text = ratio.ToGUIFormat() - If outputShaftTorque.HasValue Then - retVal.SubItems.Add(outputShaftTorque.Value.ToGUIFormat()) - End If - If outputShaftSpeed.HasValue Then - retVal.SubItems.Add(outputShaftSpeed.Value.ToGUIFormat()) - End If - Return retVal - - End Function - - Private Sub btAddDragCurve_Click(sender As Object, e As EventArgs) Handles btAddDragCurve.Click - AddListViewItem(_dragCurveDlg, _lvDragCurve) - End Sub - - Private Sub AddListViewItem(dialog As IEPCInputDialog, listView As ListView) - If dialog.ShowDialog() = DialogResult.OK Then - Dim gear = Convert.ToInt32(dialog.tbGear.Text) - Dim filePath = dialog.tbInputFile.Text - listView.Items.Add(CreateListViewItem(gear, filePath)) - Change() - End If - End Sub - - Private Sub btRemoveDragCurve_Click(sender As Object, e As EventArgs) Handles btRemoveDragCurve.Click - RemoveListEntry(_lvDragCurve) - End Sub - - Private Sub btRemoveGear_Click(sender As Object, e As EventArgs) Handles btRemoveGear.Click - RemoveListEntry(_lvGear) - RemoveListEntry(_lvPowerMap1) - RemoveListEntry(_lvPowerMap2) - End Sub - - Private Sub RemoveListEntry(listView As ListView) - If listView.Items.Count = 0 Then - Exit Sub - Else - listView.Items(listView.Items.Count - 1).Remove() - Change() - End If - End Sub - - Private Sub btAddGear_Click(sender As Object, e As EventArgs) Handles btAddGear.Click - _gearDlg.Clear() - - If (_gearDlg.ShowDialog() = DialogResult.OK) Then - Dim ratio = Convert.ToDouble(_gearDlg.tbRatio.Text) - Dim outputShaftTorque As Double? - Dim outputShaftSpeed As Double? - If _gearDlg.tbMaxOutShaftTorque.Text.Length > 0 Then - outputShaftTorque = _gearDlg.tbMaxOutShaftTorque.Text.ToDouble(0) - End If - If _gearDlg.tbMaxOutShaftSpeed.Text.Length > 0 Then - outputShaftSpeed = _gearDlg.tbMaxOutShaftTorque.Text.ToDouble(0) - End If - - Dim entry = CreateListViewItem(ratio, outputShaftTorque, outputShaftSpeed) - _lvGear.Items.Add(entry) - AddPowerMapEntry(lvPowerMap1, _lvGear.Items.Count) - AddPowerMapEntry(lvPowerMap2, _lvGear.Items.Count) - - Change() - End If - End Sub - - Private Sub AddPowerMapEntry(powerMapListView As ListView, gearIndex As Integer) - Dim retVal As New ListViewItem - retVal.SubItems(0).Text = gearIndex.ToString() - powerMapListView.Items.Add(retVal) - End Sub - - Private Sub lvGear_DoubleClick(sender As Object, e As EventArgs) Handles lvGear.DoubleClick - - If lvGear.SelectedItems.Count = 0 Then Exit Sub - - Dim entry As ListViewItem = lvGear.SelectedItems(0) - - _gearDlg.tbRatio.Text = entry.SubItems(0).Text - _gearDlg.tbMaxOutShaftSpeed.Text = entry.SubItems(1).Text - _gearDlg.tbMaxOutShaftTorque.Text = entry.SubItems(2).Text - _gearDlg.tbRatio.Focus() - - If _gearDlg.ShowDialog() = DialogResult.OK Then - entry.SubItems(0).Text = _gearDlg.tbRatio.Text - entry.SubItems(1).Text = _gearDlg.tbMaxOutShaftSpeed.Text - entry.SubItems(2).Text = _gearDlg.tbMaxOutShaftTorque.Text - Change() - End If - - End Sub - - Private Sub lvDragCurve_DoubleClick(sender As Object, e As EventArgs) Handles lvDragCurve.DoubleClick - EditEntry(_dragCurveDlg, lvDragCurve) - End Sub - - Private Sub lvPowerMap1_DoubleClick(sender As Object, e As EventArgs) Handles lvPowerMap1.DoubleClick - EditEntry(_powerMapDlg, lvPowerMap1) - End Sub - - Private Sub lvPowerMap2_DoubleClick(sender As Object, e As EventArgs) Handles lvPowerMap2.DoubleClick - EditEntry(_powerMapDlg, lvPowerMap2) - End Sub - - Private Sub EditEntry(dialog As IEPCInputDialog, listView As ListView) - - If listView.SelectedItems.Count = 0 Then Exit Sub - - Dim entry As ListViewItem = listView.SelectedItems(0) - dialog.tbGear.Text = entry.SubItems(0).Text - If entry.SubItems.Count = 2 Then - dialog.tbInputFile.Text = entry.SubItems(1).Text - End If - dialog.tbGear.Focus() - - If dialog.ShowDialog() = DialogResult.OK Then - entry.SubItems(0).Text = dialog.tbGear.Text - entry.SubItems(1).Text = dialog.tbInputFile.Text - End If - - End Sub - - Private Sub btFLCurveFile1_Click(sender As Object, e As EventArgs) Handles btFLCurveFile1.Click - If IEPCFLCFileBrowser.OpenDialog(FileRepl(tbFLCurve1.Text, GetPath(_flcFilePath1))) Then - tbFLCurve1.Text = GetFilenameWithoutDirectory(IEPCFLCFileBrowser.Files(0), GetPath(_flcFilePath1)) - End If - End Sub - - Private Sub btFLCurveFile2_Click(sender As Object, e As EventArgs) Handles btFLCurveFile2.Click - If IEPCFLCFileBrowser.OpenDialog(FileRepl(tbFLCurve2.Text, GetPath(_flcFilePath2))) Then - tbFLCurve2.Text = GetFilenameWithoutDirectory(IEPCFLCFileBrowser.Files(0), GetPath(_flcFilePath2)) - End If - End Sub - - Private Sub ToolStripBtNew_Click(sender As Object, e As EventArgs) Handles ToolStripBtNew.Click - NewIEPC() - End Sub - - Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click - If IEPCFileBrowser.OpenDialog(_iepcFilePath) Then - Try - ReadIEPCFile(IEPCFileBrowser.Files(0)) - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.OkOnly, $"Error loading IEPC(.{IEPCFileBrowser.Extensions}) File") - End Try - End If - End Sub - - #Region "Toolbar" - - Public Sub NewIEPC() - tbModel.Text = "" - tbInertia.Text = "" - cbDifferentialIncluded.Checked = False - cbDifferentialIncluded.Checked = False - tbNumberOfDesignTypeWheelMotor.Text = "" - tbThermalOverload.Text = "" - - tbVoltage1.Text = "" - tbContinousTorque1.Text = "" - tbContinousTorqueSpeed1.Text = "" - tbOverloadTime1.Text = "" - tbOverloadTorque1.Text = "" - tboverloadTorqueSpeed1.Text = "" - tbFLCurve1.Text = "" - _flcFilePath1 = "" - RemoveAllListViewItems(lvPowerMap1) - - tbVoltage2.Text = "" - tbContinousTorque2.Text = "" - tbContinousTorqueSpeed2.Text = "" - tbOverloadTime2.Text = "" - tbOverloadTorque2.Text = "" - tboverloadTorqueSpeed2.Text = "" - tbFLCurve2.Text = "" - _flcFilePath2 = "" - RemoveAllListViewItems(lvPowerMap2) - - RemoveAllListViewItems(lvDragCurve) - RemoveAllListViewItems(lvGear) - LbStatus.Text = "" - - _changed = False - End Sub - - Private Sub RemoveAllListViewItems(listView As ListView) - If listView.Items.Count = 0 Then - Exit Sub - Else - For Each listItem As ListViewItem In listView.Items - listItem.Remove() - Next - End If - End Sub - - Private Sub ToolStripBtSave_Click(sender As Object, e As EventArgs) Handles ToolStripBtSave.Click - SaveOrSaveAs(False) - End Sub - - Private Sub ToolStripBtSaveAs_Click(sender As Object, e As EventArgs) Handles ToolStripBtSaveAs.Click - SaveOrSaveAs(True) - End Sub - - Private Sub ToolStripBtSendTo_Click(sender As Object, e As EventArgs) Handles ToolStripBtSendTo.Click - If ChangeCheckCancel() Then Exit Sub - - If _iepcFilePath = "" Then - If MsgBox("Save file now?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then - If Not SaveOrSaveAs(True) Then Exit Sub - Else - Exit Sub - End If - End If - - If Not VectoJobForm.Visible Then - JobDir = "" - VectoJobForm.Show() - VectoJobForm.VectoNew() - Else - VectoJobForm.WindowState = FormWindowState.Normal - End If - - VectoJobForm.TbENG.Text = GetFilenameWithoutDirectory(_iepcFilePath, JobDir) - End Sub - - Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click - If File.Exists(Path.Combine(MyAppPath, "User Manual\help.html")) Then - Dim defaultBrowserPath As String = BrowserUtils.GetDefaultBrowserPath() - Process.Start(defaultBrowserPath, - $"""file://{Path.Combine(MyAppPath, "User Manual\help.html#iepc-editor")}""") - Else - MsgBox("User Manual not found!", MsgBoxStyle.Critical) - End If - End Sub - - #End Region - - #Region "Save Methods" - - Private Function ChangeCheckCancel() As Boolean - If _changed Then - Select Case MsgBox("Save changes ?", MsgBoxStyle.YesNoCancel) - Case MsgBoxResult.Yes - Return Not SaveOrSaveAs(False) - Case MsgBoxResult.Cancel - Return True - Case Else - _changed = False - Return False - End Select - Else - Return False - End If - End Function - - Private Function SaveOrSaveAs(ByVal saveAs As Boolean) As Boolean - If ValidateData() = False Then _ - Return False - - If _iepcFilePath = "" Or saveAs Then - If IEPCFileBrowser.SaveDialog(_iepcFilePath) Then - _iepcFilePath = IEPCFileBrowser.Files(0) - Else - Return False - End If - End If - Return SaveIEPCToFile(_iepcFilePath) - End Function - - Private Function SaveIEPCToFile(ByVal file As String) As Boolean - Dim iepc = New IEPCInputData - - iepc.SetCommonEntries(tbModel.Text, tbInertia.Text, cbDesignTypeWheelMotor.Checked, - tbNumberOfDesignTypeWheelMotor.Text, cbDifferentialIncluded.Checked, - tbThermalOverload.Text) - - iepc.SetVoltageLevelEntries(tbVoltage1.Text, tbContinousTorque1.Text, tbContinousTorqueSpeed1.Text, - tbOverloadTime1.Text, tbOverloadTorque1.Text, tboverloadTorqueSpeed1.Text, - tbFLCurve1.Text, lvPowerMap1) - - iepc.SetVoltageLevelEntries(tbVoltage2.Text, tbContinousTorque2.Text, tbContinousTorqueSpeed2.Text, - tbOverloadTime2.Text, tbOverloadTorque2.Text, tboverloadTorqueSpeed2.Text, - tbFLCurve2.Text, lvPowerMap2) - - iepc.SetGearsEntries(lvGear) - iepc.SetDragCurveEntries(lvDragCurve) - - - If Not iepc.SaveFile(file) Then - MsgBox("Cannot save to " & file, MsgBoxStyle.Critical) - Return False - End If - - _changed = False - LbStatus.Text = "" - - Return True - End Function - - - #End Region - - - - Private Sub ButOK_Click(sender As Object, e As EventArgs) Handles ButOK.Click - SaveOrSaveAs(true) - End Sub - - Private Sub ButCancel_Click(sender As Object, e As EventArgs) Handles ButCancel.Click - Close() - End Sub - - - #Region "Validate Input" - - Private Function ValidateData() As Boolean - - If ValidateModel() = False Then Return False - If ValidateInertia() = False Then Return False - If ValidateNrDesignTypeWheelMotorMeasured() = False Then Return False - If ValidateOverloadRecoveryFactor() = False Then Return False - - If ValidateVoltage(tbVoltage1) = False Then Return False - If ValidateContinuousTorque(tbContinousTorque1) = False Then Return False - If ValidateContinuousTorqueSpeed(tbContinousTorqueSpeed1) = False Then Return False - If ValidateOverloadTime(tbOverloadTime1) = False Then Return False - If ValidateOverloadTorque(tbOverloadTorque1) = False Then Return False - If ValidateOverloadTorqueSpeed(tboverloadTorqueSpeed1) = False Then Return False - - If ValidateVoltage(tbVoltage2) = False Then Return False - If ValidateContinuousTorque(tbContinousTorque2) = False Then Return False - If ValidateContinuousTorqueSpeed(tbContinousTorqueSpeed2) = False Then Return False - If ValidateOverloadTime(tbOverloadTime2) = False Then Return False - If ValidateOverloadTorque(tbOverloadTorque2) = False Then Return False - If ValidateOverloadTorqueSpeed(tboverloadTorqueSpeed2) = False Then Return False - - If ValidateAmountOfEntries() = False Then Return False - If ValidateFullLoadCurve1() = False Then Return False - If ValidateFullLoadCurve2() = False Then Return False - - If ValidatePowerMapEntries(_lvPowerMap1) = False Then Return False - If ValidatePowerMapEntries(_lvPowerMap2) = False Then Return False - - Return True - End Function - - Private Function ValidateModel() As Boolean - If String.IsNullOrEmpty(tbModel.Text) Then - ShowErrorMessageBox("Model", tbModel) - Return False - End If - Return True - End Function - - Private Function ValidateInertia() As Boolean - If Not ValidDoubleValue(tbInertia.Text) Then - ShowErrorMessageBox("Inertia", tbInertia) - Return False - End If - Return True - End Function - - Private Function ValidateNrDesignTypeWheelMotorMeasured() As Boolean - If Not cbDesignTypeWheelMotor.Checked AND Not ValidDoubleValue(tbNumberOfDesignTypeWheelMotor.Text) Then - ShowErrorMessageBox("Nr of Design Type Wheel Motor Measured", tbNumberOfDesignTypeWheelMotor) - Return False - End If - Return True - End Function - - Private Function ValidateOverloadRecoveryFactor() As Boolean - If Not ValidDoubleValue(tbThermalOverload.Text) Then - ShowErrorMessageBox("Thermal Overload Recovery Factor", tbThermalOverload) - Return False - End If - Return True - End Function - - Private Function ValidateVoltage(tb As TextBox) As Boolean - If Not ValidDoubleValue(tb.Text) Then - ShowErrorMessageBox("Voltage", tb) - Return False - End If - Return True - End Function - - Private Function ValidateContinuousTorque(tb As TextBox) As Boolean - If Not ValidDoubleValue(tb.Text) Then - ShowErrorMessageBox("Continuous Torque", tb) - Return False - End If - Return True - End Function - - Private Function ValidateContinuousTorqueSpeed(tb As TextBox) As Boolean - If Not ValidDoubleValue(tb.Text) Then - ShowErrorMessageBox("Continuous Torque", tb) - Return False - End If - Return True - End Function - - Private Function ValidateOverloadTime(tb As TextBox) As Boolean - If Not ValidDoubleValue(tb.Text) Then - ShowErrorMessageBox("Overload Time", tb) - Return False - End If - Return True - End Function - - Private Function ValidateOverloadTorque(tb As TextBox) As Boolean - If Not ValidDoubleValue(tb.Text) Then - ShowErrorMessageBox("Overload Torque", tb) - Return False - End If - Return True - End Function - - Private Function ValidateOverloadTorqueSpeed(tb As TextBox) As Boolean - If Not ValidDoubleValue(tb.Text) Then - ShowErrorMessageBox("Overload Torque Speed", tb) - Return False - End If - Return True - End Function - - Private Function ValidateAmountOfEntries() As Boolean - If _lvGear.Items.Count = 0 Then - ShowErrorMessageBox("Invalid input no Gear given") - Return False - End If - - If Not _lvPowerMap1.Items.Count = _lvGear.Items.Count Then - ShowErrorMessageBox("Invalid number of Power Map entries at Voltage Level Low") - Return False - End If - - If Not _lvPowerMap2.Items.Count = _lvGear.Items.Count Then - ShowErrorMessageBox("Invalid number of Power Map entries at Voltage Level High") - Return False - End If - - If _lvDragCurve.Items.Count = 0 - ShowErrorMessageBox("Invalid input no Drag Curve given") - Return False - End If - - If Not _lvDragCurve.Items.Count = _lvGear.Items.Count And _lvDragCurve.Items.Count > 1 - ShowErrorMessageBox("Invalid numbers of Drag Curves given") - Return False - End If - - Return True - End Function - - Private Function ValidateFullLoadCurve1() As Boolean - If Not File.Exists(tbFLCurve1.Text) Then - ShowErrorMessageBox("No valid file path given", tbFLCurve1, False) - Return False - End If + Public JobDir As String = "" + Private _iepcFilePath as String = "" + Private _powerMapDlg As IEPCInputDialog + Private _dragCurveDlg As IEPCInputDialog + Private _gearDlg As IEPCGearInputDialog + Private _flcFilePath1 as String + Private _flcFilePath2 as String + Private _changed as Boolean + + Private _contextMenuFiles As String() + + + Private Sub IEPCForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load + _powerMapDlg = New IEPCInputDialog(IEPCDialogType.PowerMapDialog) + _dragCurveDlg = New IEPCInputDialog(IEPCDialogType.DragCurveDialog) + _gearDlg = New IEPCGearInputDialog() + End Sub + + Public Sub ReadIEPCFile(file As String) + Dim inputData = JSONInputDataFactory.ReadIEPCEngineeringInputData(file, True) + + tbModel.Text = inputData.Model + tbInertia.Text = inputData.Inertia.ToGUIFormat() + cbDifferentialIncluded.Checked = inputData.DifferentialIncluded + cbDesignTypeWheelMotor.Checked = inputData.DesignTypeWheelMotor + tbNumberOfDesignTypeWheelMotor.Text = inputData.NrOfDesignTypeWheelMotorMeasured.Value.ToGUIFormat() + tbThermalOverload.Text = inputData.OverloadRecoveryFactor.ToGUIFormat() + + Dim voltageLevel = inputData.VoltageLevels.First() + SetFirstVoltageLevel(voltageLevel) + voltageLevel = inputData.VoltageLevels.Last() + SetSecondaryVoltageLevel(voltageLevel) + SetGearEntries(inputData.Gears) + SetDragEntries(inputData.DragCurves) + _iepcFilePath = file + + LbStatus.Text = "" + _changed = False + End Sub + + Private Sub SetFirstVoltageLevel(voltageLevel As IElectricMotorVoltageLevel) + tbVoltage1.Text = voltageLevel.VoltageLevel.ToGUIFormat() + tbContinousTorque1.Text = voltageLevel.ContinuousTorque.ToGUIFormat() + tbContinousTorqueSpeed1.Text = voltageLevel.ContinuousTorqueSpeed.AsRPM.ToGUIFormat() + tbOverloadTime1.Text = voltageLevel.OverloadTime.ToGUIFormat() + tbOverloadTorque1.Text = voltageLevel.OverloadTorque.ToGUIFormat() + tboverloadTorqueSpeed1.Text = voltageLevel.OverloadTestSpeed.AsRPM.ToGUIFormat() + tbFLCurve1.Text = voltageLevel.FullLoadCurve.Source + SetPowerMapEntries(_lvPowerMap1, voltageLevel.PowerMap) + End Sub + + Private Sub SetSecondaryVoltageLevel(voltageLevel As IElectricMotorVoltageLevel) + tbVoltage2.Text = voltageLevel.VoltageLevel.ToGUIFormat() + tbContinousTorque2.Text = voltageLevel.ContinuousTorque.ToGUIFormat() + tbContinousTorqueSpeed2.Text = voltageLevel.ContinuousTorqueSpeed.AsRPM.ToGUIFormat() + tbOverloadTime2.Text = voltageLevel.OverloadTime.ToGUIFormat() + tbOverloadTorque2.Text = voltageLevel.OverloadTorque.ToGUIFormat() + tbOverloadTorqueSpeed2.Text = voltageLevel.OverloadTestSpeed.AsRPM.ToGUIFormat() + tbFLCurve2.Text = voltageLevel.FullLoadCurve.Source + SetPowerMapEntries(_lvPowerMap2, voltageLevel.PowerMap) + End Sub + + Private Sub SetGearEntries(entries As IList(Of IGearEntry)) + For Each entry As IGearEntry In entries + Dim listEntry = CreateListViewItem(entry.Ratio, entry.MaxOutputShaftTorque, entry.MaxOutputShaftSpeed) + _lvGear.Items.Add(listEntry) + Next + End Sub + + Private Sub SetDragEntries(entries As IList(Of IDragCurve)) + For Each entry As IDragCurve In entries + Dim listEntry = CreateListViewItem(entry.Gear.Value, entry.DragCurve.Source) + _lvDragCurve.Items.Add(listEntry) + Next + End Sub + + Private Sub SetPowerMapEntries(powerMapListView As ListView, entries As IList(Of IElectricMotorPowerMap)) + For Each entry As IElectricMotorPowerMap In entries + Dim listEntry = CreateListViewItem(entry.Gear, entry.PowerMap.Source) + powerMapListView.Items.Add(listEntry) + Next + End Sub + + Private Function CreateListViewItem(axleNumber As Integer, filepath As String) As ListViewItem + Dim retVal As New ListViewItem + retVal.SubItems(0).Text = axleNumber.ToGUIFormat() + retVal.SubItems.Add(filepath) + Return retVal + End Function + + Private Function CreateListViewItem(ratio As Double, outputShaftTorque As NewtonMeter, outputShaftSpeed As PerSecond) As ListViewItem + Dim retVal As New ListViewItem + retVal.SubItems(0).Text = ratio.ToGUIFormat() + retVal.SubItems.Add(outputShaftTorque?.ToGUIFormat()) + retVal.SubItems.Add(outputShaftSpeed?.ToGUIFormat()) + Return retVal + End Function + + Private Function CreateListViewItem(ratio As Double, outputShaftTorque As Double?, outputShaftSpeed As Double?) As ListViewItem + + Dim retVal As New ListViewItem + retVal.SubItems(0).Text = ratio.ToGUIFormat() + If outputShaftTorque.HasValue Then + retVal.SubItems.Add(outputShaftTorque.Value.ToGUIFormat()) + End If + If outputShaftSpeed.HasValue Then + retVal.SubItems.Add(outputShaftSpeed.Value.ToGUIFormat()) + End If + Return retVal + + End Function + + Private Sub btAddDragCurve_Click(sender As Object, e As EventArgs) Handles btAddDragCurve.Click + AddListViewItem(_dragCurveDlg, _lvDragCurve) + End Sub + + Private Sub AddListViewItem(dialog As IEPCInputDialog, listView As ListView) + If dialog.ShowDialog() = DialogResult.OK Then + Dim gear = Convert.ToInt32(dialog.tbGear.Text) + Dim filePath = dialog.tbInputFile.Text + listView.Items.Add(CreateListViewItem(gear, filePath)) + Change() + End If + End Sub + + Private Sub btRemoveDragCurve_Click(sender As Object, e As EventArgs) Handles btRemoveDragCurve.Click + RemoveListEntry(_lvDragCurve) + End Sub + + Private Sub btRemoveGear_Click(sender As Object, e As EventArgs) Handles btRemoveGear.Click + RemoveListEntry(_lvGear) + RemoveListEntry(_lvPowerMap1) + RemoveListEntry(_lvPowerMap2) + End Sub + + Private Sub RemoveListEntry(listView As ListView) + If listView.Items.Count = 0 Then + Exit Sub + Else + listView.Items(listView.Items.Count - 1).Remove() + Change() + End If + End Sub + + Private Sub btAddGear_Click(sender As Object, e As EventArgs) Handles btAddGear.Click + _gearDlg.Clear() + + If (_gearDlg.ShowDialog() = DialogResult.OK) Then + Dim ratio = Convert.ToDouble(_gearDlg.tbRatio.Text) + Dim outputShaftTorque As Double? + Dim outputShaftSpeed As Double? + If _gearDlg.tbMaxOutShaftTorque.Text.Length > 0 Then + outputShaftTorque = _gearDlg.tbMaxOutShaftTorque.Text.ToDouble(0) + End If + If _gearDlg.tbMaxOutShaftSpeed.Text.Length > 0 Then + outputShaftSpeed = _gearDlg.tbMaxOutShaftTorque.Text.ToDouble(0) + End If + + Dim entry = CreateListViewItem(ratio, outputShaftTorque, outputShaftSpeed) + _lvGear.Items.Add(entry) + AddPowerMapEntry(lvPowerMap1, _lvGear.Items.Count) + AddPowerMapEntry(lvPowerMap2, _lvGear.Items.Count) - Dim fileExtension = new FileInfo(tbFLCurve1.Text).Extension - If Not $".{IEPCFLCFileBrowser.Extensions.First()}" = fileExtension Then - ShowErrorMessageBox($"The selected Full Load Curve file(.{IEPCFLCFileBrowser.Extensions.First()}) has the wrong extension", - tbFLCurve1, False) - Return False - End If - Return True - End Function - - Private Function ValidateFullLoadCurve2() As Boolean - If Not File.Exists(tbFLCurve2.Text) Then - ShowErrorMessageBox("Invalid input no valid file path given", tbFLCurve2, False) - Return False - End If + Change() + End If + End Sub + + Private Sub AddPowerMapEntry(powerMapListView As ListView, gearIndex As Integer) + Dim retVal As New ListViewItem + retVal.SubItems(0).Text = gearIndex.ToString() + powerMapListView.Items.Add(retVal) + End Sub + + Private Sub lvGear_DoubleClick(sender As Object, e As EventArgs) Handles lvGear.DoubleClick + + If lvGear.SelectedItems.Count = 0 Then Exit Sub + + Dim entry As ListViewItem = lvGear.SelectedItems(0) + + _gearDlg.tbRatio.Text = entry.SubItems(0).Text + _gearDlg.tbMaxOutShaftSpeed.Text = entry.SubItems(1).Text + _gearDlg.tbMaxOutShaftTorque.Text = entry.SubItems(2).Text + _gearDlg.tbRatio.Focus() + + If _gearDlg.ShowDialog() = DialogResult.OK Then + entry.SubItems(0).Text = _gearDlg.tbRatio.Text + entry.SubItems(1).Text = _gearDlg.tbMaxOutShaftSpeed.Text + entry.SubItems(2).Text = _gearDlg.tbMaxOutShaftTorque.Text + Change() + End If + + End Sub + + Private Sub lvDragCurve_DoubleClick(sender As Object, e As EventArgs) Handles lvDragCurve.DoubleClick + EditEntry(_dragCurveDlg, lvDragCurve) + End Sub + + Private Sub lvPowerMap1_DoubleClick(sender As Object, e As EventArgs) Handles lvPowerMap1.DoubleClick + EditEntry(_powerMapDlg, lvPowerMap1) + End Sub + + Private Sub lvPowerMap2_DoubleClick(sender As Object, e As EventArgs) Handles lvPowerMap2.DoubleClick + EditEntry(_powerMapDlg, lvPowerMap2) + End Sub + + Private Sub EditEntry(dialog As IEPCInputDialog, listView As ListView) + + If listView.SelectedItems.Count = 0 Then Exit Sub + + Dim entry As ListViewItem = listView.SelectedItems(0) + dialog.tbGear.Text = entry.SubItems(0).Text + If entry.SubItems.Count = 2 Then + dialog.tbInputFile.Text = entry.SubItems(1).Text + End If + dialog.tbGear.Focus() + + If dialog.ShowDialog() = DialogResult.OK Then + entry.SubItems(0).Text = dialog.tbGear.Text + entry.SubItems(1).Text = dialog.tbInputFile.Text + End If + + End Sub + + Private Sub btFLCurveFile1_Click(sender As Object, e As EventArgs) Handles btFLCurveFile1.Click + If IEPCFLCFileBrowser.OpenDialog(FileRepl(tbFLCurve1.Text, GetPath(_flcFilePath1))) Then + tbFLCurve1.Text = GetFilenameWithoutDirectory(IEPCFLCFileBrowser.Files(0), GetPath(_flcFilePath1)) + End If + End Sub + + Private Sub btFLCurveFile2_Click(sender As Object, e As EventArgs) Handles btFLCurveFile2.Click + If IEPCFLCFileBrowser.OpenDialog(FileRepl(tbFLCurve2.Text, GetPath(_flcFilePath2))) Then + tbFLCurve2.Text = GetFilenameWithoutDirectory(IEPCFLCFileBrowser.Files(0), GetPath(_flcFilePath2)) + End If + End Sub + + Private Sub ToolStripBtNew_Click(sender As Object, e As EventArgs) Handles ToolStripBtNew.Click + NewIEPC() + End Sub + + Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click + If IEPCFileBrowser.OpenDialog(_iepcFilePath) Then + Try + ReadIEPCFile(IEPCFileBrowser.Files(0)) + Catch ex As Exception + MsgBox(ex.Message, MsgBoxStyle.OkOnly, $"Error loading IEPC(.{IEPCFileBrowser.Extensions}) File") + End Try + End If + End Sub + + #Region "Toolbar" + + Public Sub NewIEPC() + tbModel.Text = "" + tbInertia.Text = "" + cbDifferentialIncluded.Checked = False + cbDifferentialIncluded.Checked = False + tbNumberOfDesignTypeWheelMotor.Text = "" + tbThermalOverload.Text = "" + + tbVoltage1.Text = "" + tbContinousTorque1.Text = "" + tbContinousTorqueSpeed1.Text = "" + tbOverloadTime1.Text = "" + tbOverloadTorque1.Text = "" + tboverloadTorqueSpeed1.Text = "" + tbFLCurve1.Text = "" + _flcFilePath1 = "" + RemoveAllListViewItems(lvPowerMap1) - Dim fileExtension = new FileInfo(tbFLCurve2.Text).Extension - If Not $".{IEPCFLCFileBrowser.Extensions.First()}" = fileExtension Then - ShowErrorMessageBox($"The selected Full Load Curve file(.{IEPCFLCFileBrowser.Extensions.First()}) has the wrong file extension", - tbFLCurve2, False) - Return False - End If - Return True - End Function - - Private Function ValidatePowerMapEntries(powerMap as ListView) As Boolean - - For Each entry As ListViewItem In powerMap.Items - If entry.SubItems.Count = 1 Then - ShowErrorMessageBox("Invalid input missing Power Map files") - Return False - End If - - If entry.SubItems.Count = 2 Then - Dim fileExtension = new FileInfo(entry.SubItems(1).Text).Extension - If Not $".{IEPCPowerMapFileBrowser.Extensions.First()}" = fileExtension - ShowErrorMessageBox($"The selected Full Load Curve file(.{IEPCPowerMapFileBrowser.Extensions.First()}) has the wrong file extension") - Return false - End If - End If - Next - Return True - - End Function - - Private Sub ShowErrorMessageBox(message As string, textbox As TextBox, Optional defaultMessage As Boolean = True) - If Not message = Nothing And defaultMessage Then - MsgBox($"Invalid input for {message}") - textbox.Focus() - Return - Else - MsgBox($"{message}") - textbox.Focus() - Return - End If - End Sub - - Private Sub ShowErrorMessageBox(message As string) - If Not message = Nothing Then - MsgBox($"{message}") - Return - End If - End Sub - - Private Function ValidDoubleValue(value As string) As Boolean - If String.IsNullOrEmpty(value) - Return false - End If - Return IsNumeric(value) - End Function + tbVoltage2.Text = "" + tbContinousTorque2.Text = "" + tbContinousTorqueSpeed2.Text = "" + tbOverloadTime2.Text = "" + tbOverloadTorque2.Text = "" + tboverloadTorqueSpeed2.Text = "" + tbFLCurve2.Text = "" + _flcFilePath2 = "" + RemoveAllListViewItems(lvPowerMap2) + + RemoveAllListViewItems(lvDragCurve) + RemoveAllListViewItems(lvGear) + LbStatus.Text = "" + + _changed = False + End Sub + + Private Sub RemoveAllListViewItems(listView As ListView) + If listView.Items.Count = 0 Then + Exit Sub + Else + For Each listItem As ListViewItem In listView.Items + listItem.Remove() + Next + End If + End Sub + + Private Sub ToolStripBtSave_Click(sender As Object, e As EventArgs) Handles ToolStripBtSave.Click + SaveOrSaveAs(False) + End Sub + + Private Sub ToolStripBtSaveAs_Click(sender As Object, e As EventArgs) Handles ToolStripBtSaveAs.Click + SaveOrSaveAs(True) + End Sub + + Private Sub ToolStripBtSendTo_Click(sender As Object, e As EventArgs) Handles ToolStripBtSendTo.Click + If ChangeCheckCancel() Then Exit Sub + + If _iepcFilePath = "" Then + If MsgBox("Save file now?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + If Not SaveOrSaveAs(True) Then Exit Sub + Else + Exit Sub + End If + End If + + If Not VectoJobForm.Visible Then + JobDir = "" + VectoJobForm.Show() + VectoJobForm.VectoNew() + Else + VectoJobForm.WindowState = FormWindowState.Normal + End If + + VectoJobForm.TbENG.Text = GetFilenameWithoutDirectory(_iepcFilePath, JobDir) + End Sub + + Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click + If File.Exists(Path.Combine(MyAppPath, "User Manual\help.html")) Then + Dim defaultBrowserPath As String = BrowserUtils.GetDefaultBrowserPath() + Process.Start(defaultBrowserPath, + $"""file://{Path.Combine(MyAppPath, "User Manual\help.html#iepc-editor")}""") + Else + MsgBox("User Manual not found!", MsgBoxStyle.Critical) + End If + End Sub + + #End Region + + #Region "Save Methods" + + Private Function ChangeCheckCancel() As Boolean + If _changed Then + Select Case MsgBox("Save changes ?", MsgBoxStyle.YesNoCancel) + Case MsgBoxResult.Yes + Return Not SaveOrSaveAs(False) + Case MsgBoxResult.Cancel + Return True + Case Else + _changed = False + Return False + End Select + Else + Return False + End If + End Function + + Private Function SaveOrSaveAs(ByVal saveAs As Boolean) As Boolean + If ValidateData() = False Then _ + Return False + + If _iepcFilePath = "" Or saveAs Then + If IEPCFileBrowser.SaveDialog(_iepcFilePath) Then + _iepcFilePath = IEPCFileBrowser.Files(0) + Else + Return False + End If + End If + Return SaveIEPCToFile(_iepcFilePath) + End Function + + Private Function SaveIEPCToFile(ByVal file As String) As Boolean + Dim iepc = New IEPCInputData + + iepc.SetCommonEntries(tbModel.Text, tbInertia.Text, cbDesignTypeWheelMotor.Checked, + tbNumberOfDesignTypeWheelMotor.Text, cbDifferentialIncluded.Checked, + tbThermalOverload.Text) + + iepc.SetVoltageLevelEntries(tbVoltage1.Text, tbContinousTorque1.Text, tbContinousTorqueSpeed1.Text, + tbOverloadTime1.Text, tbOverloadTorque1.Text, tboverloadTorqueSpeed1.Text, + tbFLCurve1.Text, lvPowerMap1) + + iepc.SetVoltageLevelEntries(tbVoltage2.Text, tbContinousTorque2.Text, tbContinousTorqueSpeed2.Text, + tbOverloadTime2.Text, tbOverloadTorque2.Text, tboverloadTorqueSpeed2.Text, + tbFLCurve2.Text, lvPowerMap2) + + iepc.SetGearsEntries(lvGear) + iepc.SetDragCurveEntries(lvDragCurve) + + + If Not iepc.SaveFile(file) Then + MsgBox("Cannot save to " & file, MsgBoxStyle.Critical) + Return False + End If + + _changed = False + LbStatus.Text = "" + + Return True + End Function + + + #End Region + + + + Private Sub ButOK_Click(sender As Object, e As EventArgs) Handles ButOK.Click + SaveOrSaveAs(true) + End Sub + + Private Sub ButCancel_Click(sender As Object, e As EventArgs) Handles ButCancel.Click + Close() + End Sub + + + #Region "Validate Input" + + Private Function ValidateData() As Boolean + + If ValidateModel() = False Then Return False + If ValidateInertia() = False Then Return False + If ValidateNrDesignTypeWheelMotorMeasured() = False Then Return False + If ValidateOverloadRecoveryFactor() = False Then Return False + + If ValidateVoltage(tbVoltage1) = False Then Return False + If ValidateContinuousTorque(tbContinousTorque1) = False Then Return False + If ValidateContinuousTorqueSpeed(tbContinousTorqueSpeed1) = False Then Return False + If ValidateOverloadTime(tbOverloadTime1) = False Then Return False + If ValidateOverloadTorque(tbOverloadTorque1) = False Then Return False + If ValidateOverloadTorqueSpeed(tboverloadTorqueSpeed1) = False Then Return False + + If ValidateVoltage(tbVoltage2) = False Then Return False + If ValidateContinuousTorque(tbContinousTorque2) = False Then Return False + If ValidateContinuousTorqueSpeed(tbContinousTorqueSpeed2) = False Then Return False + If ValidateOverloadTime(tbOverloadTime2) = False Then Return False + If ValidateOverloadTorque(tbOverloadTorque2) = False Then Return False + If ValidateOverloadTorqueSpeed(tboverloadTorqueSpeed2) = False Then Return False + + If ValidateAmountOfEntries() = False Then Return False + If ValidateFullLoadCurve1() = False Then Return False + If ValidateFullLoadCurve2() = False Then Return False + + If ValidatePowerMapEntries(_lvPowerMap1) = False Then Return False + If ValidatePowerMapEntries(_lvPowerMap2) = False Then Return False + + Return True + End Function + + Private Function ValidateModel() As Boolean + If String.IsNullOrEmpty(tbModel.Text) Then + ShowErrorMessageBox("Model", tbModel) + Return False + End If + Return True + End Function + + Private Function ValidateInertia() As Boolean + If Not ValidDoubleValue(tbInertia.Text) Then + ShowErrorMessageBox("Inertia", tbInertia) + Return False + End If + Return True + End Function + + Private Function ValidateNrDesignTypeWheelMotorMeasured() As Boolean + If Not cbDesignTypeWheelMotor.Checked AND Not ValidDoubleValue(tbNumberOfDesignTypeWheelMotor.Text) Then + ShowErrorMessageBox("Nr of Design Type Wheel Motor Measured", tbNumberOfDesignTypeWheelMotor) + Return False + End If + Return True + End Function + + Private Function ValidateOverloadRecoveryFactor() As Boolean + If Not ValidDoubleValue(tbThermalOverload.Text) Then + ShowErrorMessageBox("Thermal Overload Recovery Factor", tbThermalOverload) + Return False + End If + Return True + End Function + + Private Function ValidateVoltage(tb As TextBox) As Boolean + If Not ValidDoubleValue(tb.Text) Then + ShowErrorMessageBox("Voltage", tb) + Return False + End If + Return True + End Function + + Private Function ValidateContinuousTorque(tb As TextBox) As Boolean + If Not ValidDoubleValue(tb.Text) Then + ShowErrorMessageBox("Continuous Torque", tb) + Return False + End If + Return True + End Function + + Private Function ValidateContinuousTorqueSpeed(tb As TextBox) As Boolean + If Not ValidDoubleValue(tb.Text) Then + ShowErrorMessageBox("Continuous Torque", tb) + Return False + End If + Return True + End Function + + Private Function ValidateOverloadTime(tb As TextBox) As Boolean + If Not ValidDoubleValue(tb.Text) Then + ShowErrorMessageBox("Overload Time", tb) + Return False + End If + Return True + End Function + + Private Function ValidateOverloadTorque(tb As TextBox) As Boolean + If Not ValidDoubleValue(tb.Text) Then + ShowErrorMessageBox("Overload Torque", tb) + Return False + End If + Return True + End Function + + Private Function ValidateOverloadTorqueSpeed(tb As TextBox) As Boolean + If Not ValidDoubleValue(tb.Text) Then + ShowErrorMessageBox("Overload Torque Speed", tb) + Return False + End If + Return True + End Function + + Private Function ValidateAmountOfEntries() As Boolean + If _lvGear.Items.Count = 0 Then + ShowErrorMessageBox("Invalid input no Gear given") + Return False + End If + + If Not _lvPowerMap1.Items.Count = _lvGear.Items.Count Then + ShowErrorMessageBox("Invalid number of Power Map entries at Voltage Level Low") + Return False + End If + + If Not _lvPowerMap2.Items.Count = _lvGear.Items.Count Then + ShowErrorMessageBox("Invalid number of Power Map entries at Voltage Level High") + Return False + End If + + If _lvDragCurve.Items.Count = 0 + ShowErrorMessageBox("Invalid input no Drag Curve given") + Return False + End If + + If Not _lvDragCurve.Items.Count = _lvGear.Items.Count And _lvDragCurve.Items.Count > 1 + ShowErrorMessageBox("Invalid numbers of Drag Curves given") + Return False + End If + + Return True + End Function + + Private Function ValidateFullLoadCurve1() As Boolean + If Not File.Exists(tbFLCurve1.Text) Then + ShowErrorMessageBox("No valid file path given", tbFLCurve1, False) + Return False + End If + + Dim fileExtension = new FileInfo(tbFLCurve1.Text).Extension + If Not $".{IEPCFLCFileBrowser.Extensions.First()}" = fileExtension Then + ShowErrorMessageBox($"The selected Full Load Curve file(.{IEPCFLCFileBrowser.Extensions.First()}) has the wrong extension", + tbFLCurve1, False) + Return False + End If + Return True + End Function + + Private Function ValidateFullLoadCurve2() As Boolean + If Not File.Exists(tbFLCurve2.Text) Then + ShowErrorMessageBox("Invalid input no valid file path given", tbFLCurve2, False) + Return False + End If + + Dim fileExtension = new FileInfo(tbFLCurve2.Text).Extension + If Not $".{IEPCFLCFileBrowser.Extensions.First()}" = fileExtension Then + ShowErrorMessageBox($"The selected Full Load Curve file(.{IEPCFLCFileBrowser.Extensions.First()}) has the wrong file extension", + tbFLCurve2, False) + Return False + End If + Return True + End Function + + Private Function ValidatePowerMapEntries(powerMap as ListView) As Boolean + + For Each entry As ListViewItem In powerMap.Items + If entry.SubItems.Count = 1 Then + ShowErrorMessageBox("Invalid input missing Power Map files") + Return False + End If + + If entry.SubItems.Count = 2 Then + Dim fileExtension = new FileInfo(entry.SubItems(1).Text).Extension + If Not $".{IEPCPowerMapFileBrowser.Extensions.First()}" = fileExtension + ShowErrorMessageBox($"The selected Full Load Curve file(.{IEPCPowerMapFileBrowser.Extensions.First()}) has the wrong file extension") + Return false + End If + End If + Next + Return True + + End Function + + Private Sub ShowErrorMessageBox(message As string, textbox As TextBox, Optional defaultMessage As Boolean = True) + If Not message = Nothing And defaultMessage Then + MsgBox($"Invalid input for {message}") + textbox.Focus() + Return + Else + MsgBox($"{message}") + textbox.Focus() + Return + End If + End Sub + + Private Sub ShowErrorMessageBox(message As string) + If Not message = Nothing Then + MsgBox($"{message}") + Return + End If + End Sub + + Private Function ValidDoubleValue(value As string) As Boolean + If String.IsNullOrEmpty(value) + Return false + End If + Return IsNumeric(value) + End Function #End Region - + #Region "Track changes" - Private Sub Change() - If Not _changed Then - LbStatus.Text = "Unsaved changes in current file" - _changed = True - End If - End Sub - - Private Sub tbModel_TextChanged(sender As Object, e As EventArgs) Handles tbModel.TextChanged - Change() - End Sub - - Private Sub tbInertia_TextChanged(sender As Object, e As EventArgs) Handles tbInertia.TextChanged - Change() - End Sub - - Private Sub tbThermalOverload_TextChanged(sender As Object, e As EventArgs) Handles tbThermalOverload.TextChanged - Change() - End Sub - - Private Sub cbDifferentialIncluded_CheckedChanged(sender As Object, e As EventArgs) Handles cbDifferentialIncluded.CheckedChanged - Change() - End Sub - - Private Sub cbDesignTypeWheelMotor_CheckedChanged(sender As Object, e As EventArgs) Handles cbDesignTypeWheelMotor.CheckedChanged - tbNumberOfDesignTypeWheelMotor.Enabled = cbDesignTypeWheelMotor.Checked - If tbNumberOfDesignTypeWheelMotor.Enabled = False Then _ - tbNumberOfDesignTypeWheelMotor.Text = "0" - Change() - End Sub - - Private Sub tbNumberOfDesignTypeWheelMotor_TextChanged(sender As Object, e As EventArgs) Handles tbNumberOfDesignTypeWheelMotor.TextChanged - Change() - End Sub - - Private Sub tbVoltage1_TextChanged(sender As Object, e As EventArgs) Handles tbVoltage1.TextChanged - Change() - End Sub - - Private Sub tbContinousTorque1_TextChanged(sender As Object, e As EventArgs) Handles tbContinousTorque1.TextChanged - Change() - End Sub - - Private Sub tbContinousTorqueSpeed1_TextChanged(sender As Object, e As EventArgs) Handles tbContinousTorqueSpeed1.TextChanged - Change() - End Sub - - Private Sub tbOverloadTime1_TextChanged(sender As Object, e As EventArgs) Handles tbOverloadTime1.TextChanged - Change() - End Sub - - Private Sub tbOverloadTorque1_TextChanged(sender As Object, e As EventArgs) Handles tbOverloadTorque1.TextChanged - Change() - End Sub - - Private Sub tboverloadTorqueSpeed1_TextChanged(sender As Object, e As EventArgs) Handles tboverloadTorqueSpeed1.TextChanged - Change() - End Sub - - Private Sub tbFLCurve1_TextChanged(sender As Object, e As EventArgs) Handles tbFLCurve1.TextChanged - Change() - End Sub - - Private Sub tbVoltage2_TextChanged(sender As Object, e As EventArgs) Handles tbVoltage2.TextChanged - Change() - End Sub - - Private Sub tbContinousTorque2_TextChanged(sender As Object, e As EventArgs) Handles tbContinousTorque2.TextChanged - Change() - End Sub - - Private Sub tbContinousTorqueSpeed2_TextChanged(sender As Object, e As EventArgs) Handles tbContinousTorqueSpeed2.TextChanged - Change() - End Sub - - Private Sub tbOverloadTime2_TextChanged(sender As Object, e As EventArgs) Handles tbOverloadTime2.TextChanged - Change() - End Sub - - Private Sub tbOverloadTorque2_TextChanged(sender As Object, e As EventArgs) Handles tbOverloadTorque2.TextChanged - Change() - End Sub - - Private Sub tbOverloadTorqueSpeed2_TextChanged(sender As Object, e As EventArgs) Handles tbOverloadTorqueSpeed2.TextChanged - Change() - End Sub - - Private Sub tbFLCurve2_TextChanged(sender As Object, e As EventArgs) Handles tbFLCurve2.TextChanged - Change() - End Sub - - Private Sub IEPCForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing - If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then - e.Cancel = ChangeCheckCancel() - End If - End Sub + Private Sub Change() + If Not _changed Then + LbStatus.Text = "Unsaved changes in current file" + _changed = True + End If + End Sub + + Private Sub tbModel_TextChanged(sender As Object, e As EventArgs) Handles tbModel.TextChanged + Change() + End Sub + + Private Sub tbInertia_TextChanged(sender As Object, e As EventArgs) Handles tbInertia.TextChanged + Change() + End Sub + + Private Sub tbThermalOverload_TextChanged(sender As Object, e As EventArgs) Handles tbThermalOverload.TextChanged + Change() + End Sub + + Private Sub cbDifferentialIncluded_CheckedChanged(sender As Object, e As EventArgs) Handles cbDifferentialIncluded.CheckedChanged + Change() + End Sub + + Private Sub cbDesignTypeWheelMotor_CheckedChanged(sender As Object, e As EventArgs) Handles cbDesignTypeWheelMotor.CheckedChanged + tbNumberOfDesignTypeWheelMotor.Enabled = cbDesignTypeWheelMotor.Checked + If tbNumberOfDesignTypeWheelMotor.Enabled = False Then _ + tbNumberOfDesignTypeWheelMotor.Text = "0" + Change() + End Sub + + Private Sub tbNumberOfDesignTypeWheelMotor_TextChanged(sender As Object, e As EventArgs) Handles tbNumberOfDesignTypeWheelMotor.TextChanged + Change() + End Sub + + Private Sub tbVoltage1_TextChanged(sender As Object, e As EventArgs) Handles tbVoltage1.TextChanged + Change() + End Sub + + Private Sub tbContinousTorque1_TextChanged(sender As Object, e As EventArgs) Handles tbContinousTorque1.TextChanged + Change() + End Sub + + Private Sub tbContinousTorqueSpeed1_TextChanged(sender As Object, e As EventArgs) Handles tbContinousTorqueSpeed1.TextChanged + Change() + End Sub + + Private Sub tbOverloadTime1_TextChanged(sender As Object, e As EventArgs) Handles tbOverloadTime1.TextChanged + Change() + End Sub + + Private Sub tbOverloadTorque1_TextChanged(sender As Object, e As EventArgs) Handles tbOverloadTorque1.TextChanged + Change() + End Sub + + Private Sub tboverloadTorqueSpeed1_TextChanged(sender As Object, e As EventArgs) Handles tboverloadTorqueSpeed1.TextChanged + Change() + End Sub + + Private Sub tbFLCurve1_TextChanged(sender As Object, e As EventArgs) Handles tbFLCurve1.TextChanged + Change() + End Sub + + Private Sub tbVoltage2_TextChanged(sender As Object, e As EventArgs) Handles tbVoltage2.TextChanged + Change() + End Sub + + Private Sub tbContinousTorque2_TextChanged(sender As Object, e As EventArgs) Handles tbContinousTorque2.TextChanged + Change() + End Sub + + Private Sub tbContinousTorqueSpeed2_TextChanged(sender As Object, e As EventArgs) Handles tbContinousTorqueSpeed2.TextChanged + Change() + End Sub + + Private Sub tbOverloadTime2_TextChanged(sender As Object, e As EventArgs) Handles tbOverloadTime2.TextChanged + Change() + End Sub + + Private Sub tbOverloadTorque2_TextChanged(sender As Object, e As EventArgs) Handles tbOverloadTorque2.TextChanged + Change() + End Sub + + Private Sub tbOverloadTorqueSpeed2_TextChanged(sender As Object, e As EventArgs) Handles tbOverloadTorqueSpeed2.TextChanged + Change() + End Sub + + Private Sub tbFLCurve2_TextChanged(sender As Object, e As EventArgs) Handles tbFLCurve2.TextChanged + Change() + End Sub + + Private Sub IEPCForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing + If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then + e.Cancel = ChangeCheckCancel() + End If + End Sub + + #End Region + Private Sub btShowFLCurve1_Click(sender As Object, e As EventArgs) Handles btShowFLCurve1.Click + Dim theFile = FileRepl(tbFLCurve1.Text, GetPath(_iepcFilePath)) + + If theFile <> NoFile AndAlso File.Exists(theFile) Then + OpenFiles(theFile) + End If + End Sub + + Private Sub btShowFLCurve2_Click(sender As Object, e As EventArgs) Handles btShowFLCurve2.Click + Dim theFile = FileRepl(tbFLCurve2.Text, GetPath(_iepcFilePath)) + + If theFile <> NoFile AndAlso File.Exists(theFile) Then + OpenFiles(theFile) + End If + End Sub + + Private Sub OpenFiles(ParamArray files() As String) + + If files.Length = 0 Then Exit Sub + + _contextMenuFiles = files + + OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName + + CmOpenFile.Show(Cursor.Position) + End Sub + + Private Sub OpenWithToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OpenWithToolStripMenuItem.Click + If Not FileOpenAlt(_contextMenuFiles(0)) Then MsgBox("Failed to open file!") + End Sub + + Private Sub ShowInFolderToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ShowInFolderToolStripMenuItem.Click + + If File.Exists(_contextMenuFiles(0)) Then + Try + Process.Start("explorer", "/select,""" & _contextMenuFiles(0) & "") + Catch ex As Exception + MsgBox("Failed to open file!") + End Try + Else + MsgBox("File not found!") + End If + End Sub + End Class \ No newline at end of file -- GitLab