' Copyright 2014 European Union. ' Licensed under the EUPL (the 'Licence'); ' ' * You may not use this work except in compliance with the Licence. ' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl ' * Unless required by applicable law or agreed to in writing, ' software distributed under the Licence is distributed on an "AS IS" basis, ' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ' ' See the LICENSE.txt for the specific language governing permissions and limitations. 'Option Infer On Imports System.Collections.Generic Imports System.Drawing.Imaging Imports System.IO Imports System.Linq Imports System.Text.RegularExpressions Imports System.Windows.Forms.DataVisualization.Charting Imports TUGraz.VECTO.Input_Files Imports TUGraz.VectoCommon.InputData Imports TUGraz.VectoCommon.Models Imports TUGraz.VectoCommon.Utils Imports TUGraz.VectoCore.InputData.FileIO.JSON Imports TUGraz.VectoCore.InputData.Reader Imports TUGraz.VectoCore.Models.Declaration Imports TUGraz.VectoCore.Models.SimulationComponent.Data Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Engine Imports TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox ''' <summary> ''' Job Editor. Create/Edit VECTO job files (.vecto) ''' </summary> ''' <remarks></remarks> Public Class VectoJobForm Public VectoFile As String Private _changed As Boolean = False Private _pgDriver As TabPage Private _pgDriverOn As Boolean = True Private _auxDialog As VehicleAuxiliariesDialog 'AA-TB 'Populate Advanced Auxiliaries Private Sub PopulateAdvancedAuxiliaries() 'Scan the program directory for DLL's which are AdvancedAuxiliaries and display Dim aList As Dictionary(Of String, AdvancedAuxiliary) = DiscoverAdvancedAuxiliaries() cboAdvancedAuxiliaries.DataSource = aList.Select(Function(x) x.Value).ToList() cboAdvancedAuxiliaries.DisplayMember = "AuxiliaryName" End Sub 'Initialise form Private Sub F02_GEN_Load(sender As Object, e As EventArgs) Handles Me.Load Dim x As Integer _auxDialog = New VehicleAuxiliariesDialog _pgDriver = TabPgDriver For x = 0 To TabControl1.TabCount - 1 TabControl1.TabPages(x).Show() Next LvAux.Columns(2).Width = -2 'Declaration Mode If Cfg.DeclMode Then LvAux.Columns(2).Text = "Technology" Else LvAux.Columns(2).Text = "Input File" End If TbAuxPAdd.Enabled = Not Cfg.DeclMode CbEngOnly.Enabled = Not Cfg.DeclMode GrCycles.Enabled = Not Cfg.DeclMode GrVACC.Enabled = Not Cfg.DeclMode PnStartStop.Enabled = Not Cfg.DeclMode RdOff.Enabled = Not Cfg.DeclMode GrLAC.Enabled = Not Cfg.DeclMode ButAuxAdd.Enabled = Not Cfg.DeclMode ButAuxRem.Enabled = Not Cfg.DeclMode PnEcoRoll.Enabled = Not Cfg.DeclMode _changed = False 'AA-TB PopulateAdvancedAuxiliaries() 'Attempt to select that found in Config End Sub 'Close - Check for unsaved changes Private Sub F02_GEN_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then e.Cancel = ChangeCheckCancel() End If End Sub 'Set generic values for Declaration mode Private Sub DeclInit() If Not Cfg.DeclMode Then Exit Sub LvCycles.Items.Clear() CbEngOnly.Checked = False TbDesMaxFile.Text = "" If Not RdEcoRoll.Checked Then RdOverspeed.Checked = True CbLookAhead.Checked = True TbSSspeed.Text = DeclarationData.Driver.StartStop.MaxSpeed.AsKmph.ToGUIFormat() 'cDeclaration.SSspeed TbSStime.Text = DeclarationData.Driver.StartStop.MinTime.ToGUIFormat() 'cDeclaration.SStime TbSSdelay.Text = DeclarationData.Driver.StartStop.Delay.ToGUIFormat() ' cDeclaration.SSdelay tbLacPreviewFactor.Text = DeclarationData.Driver.LookAhead.LookAheadDistanceFactor.ToGUIFormat() tbLacDfTargetSpeedFile.Text = "" tbLacDfVelocityDropFile.Text = "" TbOverspeed.Text = DeclarationData.Driver.OverSpeedEcoRoll.OverSpeed.AsKmph.ToGUIFormat() 'cDeclaration.Overspeed TbUnderSpeed.Text = DeclarationData.Driver.OverSpeedEcoRoll.UnderSpeed.AsKmph.ToGUIFormat() _ ' cDeclaration.Underspeed TbVmin.Text = DeclarationData.Driver.OverSpeedEcoRoll.MinSpeed.AsKmph.ToGUIFormat() 'cDeclaration.ECvmin TbAuxPAdd.Text = "" If _ LvAux.Items.Count <> 5 OrElse (LvAux.Items(0).Text <> VectoCore.Configuration.Constants.Auxiliaries.IDs.Fan OrElse LvAux.Items(1).Text <> VectoCore.Configuration.Constants.Auxiliaries.IDs.SteeringPump OrElse LvAux.Items(2).Text <> VectoCore.Configuration.Constants.Auxiliaries.IDs.HeatingVentilationAirCondition OrElse LvAux.Items(3).Text <> VectoCore.Configuration.Constants.Auxiliaries.IDs.ElectricSystem OrElse LvAux.Items(4).Text <> VectoCore.Configuration.Constants.Auxiliaries.IDs.PneumaticSystem) Then LvAux.Items.Clear() LvAux.Items.Add(GetTechListForAux(AuxiliaryType.Fan, DeclarationData.Fan)) LvAux.Items.Add(GetTechListForAux(AuxiliaryType.SteeringPump, DeclarationData.SteeringPump)) LvAux.Items.Add(GetTechListForAux(AuxiliaryType.HVAC, DeclarationData.HeatingVentilationAirConditioning)) LvAux.Items.Add(GetTechListForAux(AuxiliaryType.ElectricSystem, DeclarationData.ElectricSystem)) LvAux.Items.Add(GetTechListForAux(AuxiliaryType.PneumaticSystem, DeclarationData.PneumaticSystem)) End If End Sub Protected Function GetTechListForAux(type As AuxiliaryType, aux As IDeclarationAuxiliaryTable) _ As ListViewItem Dim listViewItem As ListViewItem listViewItem = New ListViewItem(type.Key()) listViewItem.SubItems.Add(type.Name()) Dim auxtech As String() = aux.GetTechnologies() If auxtech.Count > 1 Then listViewItem.SubItems.Add("") Else listViewItem.SubItems.Add(auxtech(0)) End If Return listViewItem End Function 'Show/Hide "Driver Assist" Tab Private Sub SetDrivertab(onOff As Boolean) If onOff Then If Not _pgDriverOn Then _pgDriverOn = True TabControl1.TabPages.Insert(1, _pgDriver) End If Else If _pgDriverOn Then _pgDriverOn = False TabControl1.Controls.Remove(_pgDriver) End If End If End Sub #Region "Browse Buttons" Private Sub ButtonVEH_Click(sender As Object, e As EventArgs) Handles ButtonVEH.Click If VehicleFileBrowser.OpenDialog(FileRepl(TbVEH.Text, GetPath(VectoFile))) Then TbVEH.Text = GetFilenameWithoutDirectory(VehicleFileBrowser.Files(0), GetPath(VectoFile)) End If End Sub Private Sub ButtonMAP_Click(sender As Object, e As EventArgs) Handles ButtonMAP.Click If EngineFileBrowser.OpenDialog(FileRepl(TbENG.Text, GetPath(VectoFile))) Then TbENG.Text = GetFilenameWithoutDirectory(EngineFileBrowser.Files(0), GetPath(VectoFile)) End If End Sub Private Sub ButtonGBX_Click(sender As Object, e As EventArgs) Handles ButtonGBX.Click If GearboxFileBrowser.OpenDialog(FileRepl(TbGBX.Text, GetPath(VectoFile))) Then TbGBX.Text = GetFilenameWithoutDirectory(GearboxFileBrowser.Files(0), GetPath(VectoFile)) End If End Sub Private Sub BtDesMaxBr_Click_1(sender As Object, e As EventArgs) Handles BtDesMaxBr.Click If DriverAccelerationFileBrowser.OpenDialog(FileRepl(TbDesMaxFile.Text, GetPath(VectoFile))) Then TbDesMaxFile.Text = GetFilenameWithoutDirectory(DriverAccelerationFileBrowser.Files(0), GetPath(VectoFile)) End If End Sub Private Sub BtAccOpen_Click(sender As Object, e As EventArgs) Handles BtAccOpen.Click OpenFiles(FileRepl(TbDesMaxFile.Text, GetPath(VectoFile))) End Sub #End Region #Region "Open Buttons" 'Open Vehicle Editor Private Sub ButOpenVEH_Click(sender As Object, e As EventArgs) Handles ButOpenVEH.Click Dim f As String f = FileRepl(TbVEH.Text, GetPath(VectoFile)) 'Thus Veh-file is returned VehicleForm.JobDir = GetPath(VectoFile) VehicleForm.AutoSendTo = True If Not Trim(f) = "" Then If Not File.Exists(f) Then MsgBox("File not found!") Exit Sub End If End If If Not VehicleForm.Visible Then VehicleForm.Show() Else If VehicleForm.WindowState = FormWindowState.Minimized Then VehicleForm.WindowState = FormWindowState.Normal VehicleForm.BringToFront() End If If Not Trim(f) = "" Then Try VehicleForm.OpenVehicle(f) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Error loading Vehicle File") End Try End If End Sub 'Open Engine Editor Private Sub ButOpenENG_Click(sender As Object, e As EventArgs) Handles ButOpenENG.Click Dim f As String f = FileRepl(TbENG.Text, GetPath(VectoFile)) 'Thus Veh-file is returned EngineForm.JobDir = GetPath(VectoFile) EngineForm.AutoSendTo = True If Not Trim(f) = "" Then If Not File.Exists(f) Then MsgBox("File not found!") Exit Sub End If End If If Not EngineForm.Visible Then EngineForm.Show() Else If EngineForm.WindowState = FormWindowState.Minimized Then EngineForm.WindowState = FormWindowState.Normal EngineForm.BringToFront() End If If Not Trim(f) = "" Then EngineForm.OpenEngineFile(f) End Sub 'Open Gearbox Editor Private Sub ButOpenGBX_Click(sender As Object, e As EventArgs) Handles ButOpenGBX.Click Dim f As String f = FileRepl(TbGBX.Text, GetPath(VectoFile)) 'Thus Veh-file is returned GearboxForm.JobDir = GetPath(VectoFile) GearboxForm.AutoSendTo = True If Not Trim(f) = "" Then If Not File.Exists(f) Then MsgBox("File not found!") Exit Sub End If End If If Not GearboxForm.Visible Then GearboxForm.Show() Else If GearboxForm.WindowState = FormWindowState.Minimized Then GearboxForm.WindowState = FormWindowState.Normal GearboxForm.BringToFront() End If If Not Trim(f) = "" Then GearboxForm.OpenGbx(f) End Sub #End Region #Region "Toolbar" 'New Private Sub ToolStripBtNew_Click(sender As Object, e As EventArgs) Handles ToolStripBtNew.Click VectoNew() End Sub 'Open Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click If JobfileFileBrowser.OpenDialog(VectoFile, False, "vecto") Then VECTOload2Form(JobfileFileBrowser.Files(0)) End Sub 'Save Private Sub ToolStripBtSave_Click(sender As Object, e As EventArgs) Handles ToolStripBtSave.Click Save() End Sub 'Save As Private Sub ToolStripBtSaveAs_Click(sender As Object, e As EventArgs) Handles ToolStripBtSaveAs.Click If JobfileFileBrowser.SaveDialog(VectoFile) Then Call VECTOsave(JobfileFileBrowser.Files(0)) End Sub 'Send to Job file list in main form Private Sub ToolStripBtSendTo_Click(sender As Object, e As EventArgs) Handles ToolStripBtSendTo.Click If ChangeCheckCancel() Then Exit Sub If VectoFile = "" Then MsgBox("File not found!" & ChrW(10) & ChrW(10) & "Save file and try again.") Else MainForm.AddToJobListView(VectoFile) End If End Sub 'Help Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click If File.Exists(MyAppPath & "User Manual\help.html") Then Dim browserRegistryString As String = My.Computer.Registry.ClassesRoot.OpenSubKey("\http\shell\open\command\").GetValue("").ToString Dim defaultBrowserPath As String = Regex.Match(browserRegistryString, "(\"".*?\"")").Captures(0).ToString Process.Start(defaultBrowserPath, String.Format("""{0}{1}""", MyAppPath, "User Manual\help.html#job-editor")) Else MsgBox("User Manual not found!", MsgBoxStyle.Critical) End If End Sub #End Region 'Save ("Save" or "Save As" when new file) Private Function Save() As Boolean If VectoFile = "" Then If JobfileFileBrowser.SaveDialog("") Then VectoFile = JobfileFileBrowser.Files(0) Else Return False End If End If Try Return VECTOsave(VectoFile) Catch ex As Exception MsgBox("Error when saving file" + Environment.NewLine + ex.Message) Return False End Try End Function 'Open file Public Sub VECTOload2Form(file As String) If ChangeCheckCancel() Then Exit Sub VectoNew() 'Read GEN Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(file), IEngineeringInputDataProvider) Dim vectoJob As IEngineeringJobInputData = inputData.JobInputData() If Cfg.DeclMode <> vectoJob.SavedInDeclarationMode Then Select Case WrongMode() Case 1 Close() MainForm.RbDecl.Checked = Not MainForm.RbDecl.Checked MainForm.OpenVectoFile(file) Case -1 Exit Sub End Select End If VectoFile = file _basePath = Path.GetDirectoryName(file) 'Update Form 'Files ----------------------------- TbVEH.Text = GetRelativePath(inputData.VehicleInputData.Source, _basePath) TbENG.Text = GetRelativePath(inputData.EngineInputData.Source, _basePath) TbGBX.Text = GetRelativePath(inputData.GearboxInputData.Source, _basePath) 'Start/Stop Dim driver As IDriverEngineeringInputData = inputData.DriverInputData ChBStartStop.Checked = driver.StartStop.Enabled TbSSspeed.Text = driver.StartStop.MaxSpeed.AsKmph.ToGUIFormat() TbSStime.Text = driver.StartStop.MinTime.ToGUIFormat() TbSSdelay.Text = driver.StartStop.Delay.ToGUIFormat() If (Cfg.DeclMode) Then TbDesMaxFile.Text = "" 'AA-TB 'Try and Select any previously selected Auxiliary Type Dim declarationInput As IDeclarationInputDataProvider = CType(inputData, IDeclarationInputDataProvider) Dim auxInput As IAuxiliariesDeclarationInputData = declarationInput.AuxiliaryInputData() cboAdvancedAuxiliaries.SelectedIndex = 0 LvAux.Items.Clear() Dim entry As IAuxiliaryDeclarationInputData For Each entry In auxInput.Auxiliaries 'If entry.AuxiliaryType = AuxiliaryDemandType.Constant Then Continue For Try Dim lv0 As ListViewItem = New ListViewItem lv0.SubItems(0).Text = AuxiliaryTypeHelper.GetAuxKey(entry.Type) lv0.SubItems.Add(AuxiliaryTypeHelper.ToString(entry.Type)) lv0.SubItems.Add(String.Join(", ", entry.Technology)) LvAux.Items.Add(lv0) Catch ex As Exception End Try Next Else 'VACC TbDesMaxFile.Text = If(driver.AccelerationCurve Is Nothing, "", GetRelativePath(driver.AccelerationCurve.Source, _basePath)) Dim auxInput As IAuxiliariesEngineeringInputData = inputData.AuxiliaryInputData() For Each item As AdvancedAuxiliary In cboAdvancedAuxiliaries.Items If _ AuxiliaryModelHelper.Parse(item.AssemblyName) = auxInput.AuxiliaryAssembly AndAlso auxInput.AuxiliaryVersion = item.AuxiliaryVersion _ Then cboAdvancedAuxiliaries.SelectedItem = item Exit For End If Next 'AA-TB 'Assign any previously saved Axiliary FilePath txtAdvancedAuxiliaryFile.Text = If _ (IO.File.Exists(auxInput.AdvancedAuxiliaryFilePath), GetRelativePath(auxInput.AdvancedAuxiliaryFilePath, _basePath), "") LvAux.Items.Clear() For Each entry As IAuxiliaryEngineeringInputData In auxInput.Auxiliaries If entry.AuxiliaryType = AuxiliaryDemandType.Constant Then TbAuxPAdd.Text = entry.ConstantPowerDemand.ToGUIFormat() Continue For End If Dim lv0 As ListViewItem = New ListViewItem lv0.SubItems(0).Text = entry.ID lv0.SubItems.Add(entry.AuxiliaryType.ToString()) lv0.SubItems.Add(If(entry.DemandMap Is Nothing, "", entry.DemandMap.Source)) LvAux.Items.Add(lv0) Next End If Try Dim sb As ICycleData For Each sb In vectoJob.Cycles Dim lv0 As ListViewItem = New ListViewItem lv0.Text = GetRelativePath(sb.CycleData.Source, Path.GetDirectoryName(Path.GetFullPath(file))) 'sb.Name LvCycles.Items.Add(lv0) Next Catch ex As Exception End Try CbEngOnly.Checked = vectoJob.EngineOnlyMode If driver.OverSpeedEcoRoll.Mode = DriverMode.EcoRoll Then RdEcoRoll.Checked = True ElseIf driver.OverSpeedEcoRoll.Mode = DriverMode.Overspeed Then RdOverspeed.Checked = True Else RdOff.Checked = True End If TbOverspeed.Text = driver.OverSpeedEcoRoll.OverSpeed.AsKmph.ToGUIFormat() TbUnderSpeed.Text = driver.OverSpeedEcoRoll.UnderSpeed.AsKmph.ToGUIFormat() TbVmin.Text = driver.OverSpeedEcoRoll.MinSpeed.AsKmph.ToGUIFormat() CbLookAhead.Checked = driver.Lookahead.Enabled 'TbAlookahead.Text = CStr(VEC0.ALookahead) tbLacMinSpeed.Text = driver.Lookahead.MinSpeed.AsKmph.ToGUIFormat() 'TbVminLA.Text = CStr(VEC0.VMinLa) tbLacPreviewFactor.Text = driver.Lookahead.LookaheadDistanceFactor.ToGUIFormat() tbDfCoastingOffset.Text = driver.Lookahead.CoastingDecisionFactorOffset.ToGUIFormat() tbDfCoastingScale.Text = driver.Lookahead.CoastingDecisionFactorScaling.ToGUIFormat() tbLacDfTargetSpeedFile.Text = If(driver.Lookahead.CoastingDecisionFactorTargetSpeedLookup Is Nothing, "", GetRelativePath(driver.Lookahead.CoastingDecisionFactorTargetSpeedLookup.Source, _basePath)) tbLacDfVelocityDropFile.Text = If(driver.Lookahead.CoastingDecisionFactorVelocityDropLookup Is Nothing, "", GetRelativePath(driver.Lookahead.CoastingDecisionFactorVelocityDropLookup.Source, _basePath)) '------------------------------------------------------------- DeclInit() EngineForm.AutoSendTo = False GearboxForm.AutoSendTo = False VehicleForm.AutoSendTo = False Dim x As Integer = Len(file) While Mid(file, x, 1) <> "\" And x > 0 x = x - 1 End While Text = Mid(file, x + 1, Len(file) - x) _changed = False ToolStripStatusLabelGEN.Text = "" 'file & " opened." UpdatePic() '------------------------------------------------------------- End Sub 'Save file Private Function VECTOsave(file As String) As Boolean Dim message As String = String.Empty 'AA-TB 'Validation of Auxiliary Types/Advanced Auxiliaries 'if not classic, check the file is valid, if not fail the operation and alert user. If cboAdvancedAuxiliaries.SelectedIndex > 0 Then 'resolve absolute path for auxiliary file. Dim absoluteAAUxFile As String = ResolveAAUXFilePath(GetPath(VectoFile), txtAdvancedAuxiliaryFile.Text) Dim aaAssemblyName As String = DirectCast(cboAdvancedAuxiliaries.SelectedItem, AdvancedAuxiliary).AssemblyName Dim aaAssemblyVersion As String = DirectCast(cboAdvancedAuxiliaries.SelectedItem, AdvancedAuxiliary).AuxiliaryVersion If Not ValidateAAUXFile(absoluteAAUxFile, aaAssemblyName, aaAssemblyVersion, message) Then MessageBox.Show( String.Format("You have selected an advanced auxiliary *Auxiliary Type*, but the file specified is invalid :{0}", message)) Return False End If End If Dim vectoJob As VectoJob = New VectoJob vectoJob.FilePath = file 'Files ------------------------------------------------- ----------------- vectoJob.PathVeh = TbVEH.Text vectoJob.PathEng = TbENG.Text For Each lv0 As ListViewItem In LvCycles.Items Dim sb As SubPath = New SubPath sb.Init(GetPath(file), lv0.Text) vectoJob.CycleFiles.Add(sb) Next vectoJob.PathGbx = TbGBX.Text 'Start/Stop vectoJob.StartStop = ChBStartStop.Checked vectoJob.StartStopMaxSpeed = TbSSspeed.Text.ToDouble() vectoJob.StartStopTime = TbSStime.Text.ToDouble() vectoJob.StartStopDelay = TbSSdelay.Text.ToDouble() 'a_DesMax vectoJob.DesMaxFile = TbDesMaxFile.Text 'AA-TB vectoJob.AuxiliaryAssembly = DirectCast(cboAdvancedAuxiliaries.SelectedItem, AdvancedAuxiliary).AssemblyName vectoJob.AuxiliaryVersion = DirectCast(cboAdvancedAuxiliaries.SelectedItem, AdvancedAuxiliary).AuxiliaryVersion vectoJob.AdvancedAuxiliaryFilePath = txtAdvancedAuxiliaryFile.Text For Each lv0 As ListViewItem In LvAux.Items Dim auxEntry As VectoJob.AuxEntry = New VectoJob.AuxEntry If Cfg.DeclMode Then auxEntry.TechnologyList.Clear() auxEntry.TechnologyList.Add(lv0.SubItems(2).Text) Else auxEntry.Path.Init(GetPath(file), lv0.SubItems(2).Text) End If auxEntry.Type = lv0.SubItems(1).Text vectoJob.AuxPaths.Add(lv0.SubItems(0).Text, auxEntry) Next vectoJob.AuxPAdd = TbAuxPAdd.Text.ToDouble(0) vectoJob.EngineOnly = CbEngOnly.Checked vectoJob.EcoRollOn = RdEcoRoll.Checked vectoJob.OverSpeedOn = RdOverspeed.Checked vectoJob.OverSpeed = TbOverspeed.Text.ToDouble(0) vectoJob.UnderSpeed = TbUnderSpeed.Text.ToDouble(0) vectoJob.VMin = TbVmin.Text.ToDouble(0) vectoJob.LookAheadOn = CbLookAhead.Checked 'vec0.ALookahead = CSng(fTextboxToNumString(TbAlookahead.Text)) 'vec0.VMinLa = CSng(fTextboxToNumString(TbVminLA.Text)) vectoJob.LookAheadMinSpeed = tbLacMinSpeed.Text.ToDouble(0) vectoJob.LacPreviewFactor = tbLacPreviewFactor.Text.ToDouble(0) vectoJob.LacDfOffset = tbDfCoastingOffset.Text.ToDouble(0) vectoJob.LacDfScale = tbDfCoastingScale.Text.ToDouble(0) vectoJob.LacDfTargetSpeedFile = tbLacDfTargetSpeedFile.Text vectoJob.LacDfVelocityDropFile = tbLacDfVelocityDropFile.Text '------------------------------------------------------------ 'SAVE If Not vectoJob.SaveFile Then MsgBox("Cannot safe to " & file, MsgBoxStyle.Critical) Return False End If VectoFile = file file = GetFilenameWithoutPath(VectoFile, True) Text = file ToolStripStatusLabelGEN.Text = "" MainForm.AddToJobListView(VectoFile) _changed = False Return True End Function 'New file Public Sub VectoNew() If ChangeCheckCancel() Then Exit Sub 'Files TbVEH.Text = "" TbENG.Text = "" LvCycles.Items.Clear() TbGBX.Text = "" TbDesMaxFile.Text = "" 'Start/Stop TbSSspeed.Text = DeclarationData.Driver.StartStop.MaxSpeed.AsKmph.ToGUIFormat() TbSStime.Text = DeclarationData.Driver.StartStop.MinTime.ToGUIFormat() TbSSdelay.Text = DeclarationData.Driver.StartStop.Delay.ToGUIFormat() ChBStartStop.Checked = False LvAux.Items.Clear() CbEngOnly.Checked = False RdOff.Checked = True CbLookAhead.Checked = True 'TbAlookahead.Text = "-0.5" TbOverspeed.Text = DeclarationData.Driver.OverSpeedEcoRoll.OverSpeed.AsKmph.ToGUIFormat() TbUnderSpeed.Text = DeclarationData.Driver.OverSpeedEcoRoll.UnderSpeed.AsKmph.ToGUIFormat() TbVmin.Text = DeclarationData.Driver.OverSpeedEcoRoll.MinSpeed.AsKmph.ToGUIFormat() 'TbVminLA.Text = "50" tbLacMinSpeed.Text = DeclarationData.Driver.LookAhead.MinimumSpeed.AsKmph.ToGUIFormat() tbLacPreviewFactor.Text = DeclarationData.Driver.LookAhead.LookAheadDistanceFactor.ToGUIFormat() tbDfCoastingOffset.Text = DeclarationData.Driver.LookAhead.DecisionFactorCoastingOffset.ToGUIFormat() tbDfCoastingScale.Text = DeclarationData.Driver.LookAhead.DecisionFactorCoastingScaling.ToGUIFormat() tbLacDfTargetSpeedFile.Text = "" tbLacDfVelocityDropFile.Text = "" '--------------------------------------------------- DeclInit() EngineForm.AutoSendTo = False VectoFile = "" Text = "Job Editor" ToolStripStatusLabelGEN.Text = "" _changed = False UpdatePic() End Sub #Region "Track changes" #Region "'Change' Events" Private Sub TextBoxVEH_TextChanged(sender As Object, e As EventArgs) _ Handles TbVEH.TextChanged UpdatePic() Change() End Sub Private Sub TextBoxMAP_TextChanged(sender As Object, e As EventArgs) _ Handles TbENG.TextChanged UpdatePic() Change() End Sub Private Sub TextBoxFLD_TextChanged(sender As Object, e As EventArgs) _ Handles TbGBX.TextChanged UpdatePic() Change() End Sub Private Sub TbDesMaxFile_TextChanged_1(sender As Object, e As EventArgs) Handles TbDesMaxFile.TextChanged Change() End Sub Private Sub TBSSspeed_TextChanged(sender As Object, e As EventArgs) Handles TbSSspeed.TextChanged Change() End Sub Private Sub TBSStime_TextChanged(sender As Object, e As EventArgs) _ Handles TbSStime.TextChanged, TbSSdelay.TextChanged Change() End Sub Private Sub TbOverspeed_TextChanged(sender As Object, e As EventArgs) Handles TbOverspeed.TextChanged Change() End Sub Private Sub TbUnderSpeed_TextChanged(sender As Object, e As EventArgs) Handles TbUnderSpeed.TextChanged Change() End Sub Private Sub TbVmin_TextChanged(sender As Object, e As EventArgs) _ Handles TbVmin.TextChanged Change() End Sub Private Sub LvCycles_AfterLabelEdit(sender As Object, e As LabelEditEventArgs) _ Handles LvCycles.AfterLabelEdit Change() End Sub #End Region Private Sub Change() If Not _changed Then ToolStripStatusLabelGEN.Text = "Unsaved changes in current file" _changed = True End If End Sub ' "Save changes? "... Returns True if User aborts Private Function ChangeCheckCancel() As Boolean If _changed Then Select Case MsgBox("Save changes ?", MsgBoxStyle.YesNoCancel) Case MsgBoxResult.Yes Return Not Save() Case MsgBoxResult.Cancel Return True Case Else 'MsgBoxResult.No _changed = False Return False End Select Else Return False End If End Function #End Region #Region "Aux Listview" Private Sub ButAuxAdd_Click(sender As Object, e As EventArgs) Handles ButAuxAdd.Click Dim id As String _auxDialog.VehPath = GetPath(VectoFile) _auxDialog.TbPath.Text = "" _auxDialog.CbType.SelectedIndex = -1 _auxDialog.CbType.Text = "" _auxDialog.TbID.Text = "" '!!! Set Type before ID, because changing the type will overwrite the id !!! lbDlog: If _auxDialog.ShowDialog = DialogResult.OK Then id = UCase(Trim(_auxDialog.TbID.Text)) Dim lv0 As ListViewItem For Each lv0 In LvAux.Items If lv0.SubItems(0).Text = id Then MsgBox("ID '" & id & "' already defined!", MsgBoxStyle.Critical) _auxDialog.TbID.SelectAll() _auxDialog.TbID.Focus() GoTo lbDlog End If Next lv0 = New ListViewItem lv0.SubItems(0).Text = UCase(Trim(_auxDialog.TbID.Text)) lv0.SubItems.Add(Trim(_auxDialog.CbType.Text)) lv0.SubItems.Add(Trim(_auxDialog.TbPath.Text)) LvAux.Items.Add(lv0) Change() End If End Sub Private Sub ButAuxRem_Click(sender As Object, e As EventArgs) Handles ButAuxRem.Click RemoveAuxItem() End Sub Private Sub LvAux_DoubleClick(sender As Object, e As EventArgs) Handles LvAux.DoubleClick EditAuxItem() End Sub Private Sub LvAux_KeyDown(sender As Object, e As KeyEventArgs) Handles LvAux.KeyDown Select Case e.KeyCode Case Keys.Delete, Keys.Back If Not Cfg.DeclMode Then RemoveAuxItem() Case Keys.Enter EditAuxItem() End Select End Sub Private Sub EditAuxItem() If LvAux.SelectedItems.Count = 0 Then Exit Sub End If Dim selItem As ListViewItem = LvAux.SelectedItems(0) _auxDialog.VehPath = GetPath(VectoFile) _auxDialog.CbType.SelectedIndex = -1 _auxDialog.CbType.Text = selItem.SubItems(1).Text _auxDialog.TbID.Text = selItem.SubItems(0).Text 'After Type-set! If Cfg.DeclMode Then _auxDialog.CbTech.Text = selItem.SubItems(2).Text _auxDialog.TbPath.Text = "" Else _auxDialog.CbTech.SelectedIndex = -1 _auxDialog.TbPath.Text = selItem.SubItems(2).Text End If If _auxDialog.ShowDialog = DialogResult.OK Then selItem.SubItems(0).Text = UCase(Trim(_auxDialog.TbID.Text)) selItem.SubItems(1).Text = Trim(_auxDialog.CbType.Text) If Cfg.DeclMode Then selItem.SubItems(2).Text = Trim(_auxDialog.CbTech.Text) Else selItem.SubItems(2).Text = Trim(_auxDialog.TbPath.Text) End If Change() End If End Sub Private Sub RemoveAuxItem() Dim i As Integer If LvAux.SelectedItems.Count = 0 Then If LvAux.Items.Count = 0 Then Exit Sub Else LvAux.Items(LvAux.Items.Count - 1).Selected = True End If End If i = LvAux.SelectedItems(0).Index LvAux.SelectedItems(0).Remove() If LvAux.Items.Count > 0 Then If i < LvAux.Items.Count Then LvAux.Items(i).Selected = True Else LvAux.Items(LvAux.Items.Count - 1).Selected = True End If LvAux.Focus() End If Change() End Sub #End Region 'OK (Save & Close) Private Sub ButSave_Click(sender As Object, e As EventArgs) Handles ButOK.Click If Not Save() Then Exit Sub Close() End Sub 'Cancel Private Sub ButCancel_Click(sender As Object, e As EventArgs) Handles ButCancel.Click Close() End Sub #Region "Cycle list" Private Sub LvCycles_DoubleClick(sender As Object, e As EventArgs) Handles LvCycles.DoubleClick If LvCycles.SelectedItems.Count > 0 Then _ OpenFiles(FileRepl(LvCycles.SelectedItems(0).SubItems(0).Text, GetPath(VectoFile))) End Sub Private Sub LvCycles_KeyDown(sender As Object, e As KeyEventArgs) Handles LvCycles.KeyDown Select Case e.KeyCode Case Keys.Delete, Keys.Back RemoveCycle() Case Keys.Enter If LvCycles.SelectedItems.Count > 0 Then LvCycles.SelectedItems(0).BeginEdit() End Select End Sub Private Sub BtDRIadd_Click(sender As Object, e As EventArgs) Handles BtDRIadd.Click Dim genDir As String = GetPath(VectoFile) If DrivingCycleFileBrowser.OpenDialog("", True) Then Dim s As String For Each s In DrivingCycleFileBrowser.Files LvCycles.Items.Add(GetFilenameWithoutDirectory(s, genDir)) Next Change() End If End Sub Private Sub BtDRIrem_Click(sender As Object, e As EventArgs) Handles BtDRIrem.Click RemoveCycle() End Sub Private Sub RemoveCycle() Dim i As Integer If LvCycles.SelectedItems.Count = 0 Then If LvCycles.Items.Count = 0 Then Exit Sub Else LvCycles.Items(LvCycles.Items.Count - 1).Selected = True End If End If i = LvCycles.SelectedItems(0).Index LvCycles.SelectedItems(0).Remove() If LvCycles.Items.Count > 0 Then If i < LvCycles.Items.Count Then LvCycles.Items(i).Selected = True Else LvCycles.Items(LvCycles.Items.Count - 1).Selected = True End If LvCycles.Focus() End If Change() End Sub #End Region #Region "Enable/Disable GUI controls" 'Engine only mode changed Private Sub CbEngOnly_CheckedChanged(sender As Object, e As EventArgs) Handles CbEngOnly.CheckedChanged CheckEngOnly() Change() End Sub Private Sub CheckEngOnly() Dim onOff As Boolean onOff = Not CbEngOnly.Checked SetDrivertab(onOff) ButOpenVEH.Enabled = onOff TbVEH.Enabled = onOff ButtonVEH.Enabled = onOff ButOpenGBX.Enabled = onOff TbGBX.Enabled = onOff ButtonGBX.Enabled = onOff GrAux.Enabled = onOff End Sub 'Start/Stop changed Private Sub ChBStartStop_CheckedChanged_1(sender As Object, e As EventArgs) _ Handles ChBStartStop.CheckedChanged Change() If Not Cfg.DeclMode Then PnStartStop.Enabled = ChBStartStop.Checked End Sub 'LAC changed Private Sub CbLookAhead_CheckedChanged(sender As Object, e As EventArgs) _ Handles CbLookAhead.CheckedChanged Change() pnLookAheadCoasting.Enabled = CbLookAhead.Checked End Sub 'EcoRoll / Overspeed changed Private Sub RdOff_CheckedChanged(sender As Object, e As EventArgs) _ Handles RdOff.CheckedChanged, RdOverspeed.CheckedChanged, RdEcoRoll.CheckedChanged Dim ecoRoll As Boolean Dim overspeed As Boolean Change() ecoRoll = RdEcoRoll.Checked overspeed = RdOverspeed.Checked TbOverspeed.Enabled = overspeed Or ecoRoll Label13.Enabled = overspeed Or ecoRoll Label14.Enabled = overspeed Or ecoRoll TbUnderSpeed.Enabled = ecoRoll Label22.Enabled = ecoRoll Label20.Enabled = ecoRoll TbVmin.Enabled = overspeed Or ecoRoll Label23.Enabled = overspeed Or ecoRoll Label21.Enabled = overspeed Or ecoRoll End Sub #End Region Public Sub UpdatePic() TbHVCclass.Text = "" TbVehCat.Text = "" TbMass.Text = "" TbAxleConf.Text = "" TbEngTxt.Text = "" TbGbxTxt.Text = "" PicVehicle.Image = Nothing PicBox.Image = Nothing UpdateVehiclePic() Dim chart As Chart = Nothing UpdateEnginePic(chart) UpdateGearboxPic(chart) If chart Is Nothing Then Return Dim chartArea As ChartArea = New ChartArea() chartArea.Name = "main" chartArea.AxisX.Title = "engine speed [1/min]" chartArea.AxisX.TitleFont = New Font("Helvetica", 10) chartArea.AxisX.LabelStyle.Font = New Font("Helvetica", 8) chartArea.AxisX.LabelAutoFitStyle = LabelAutoFitStyles.None chartArea.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dot chartArea.AxisY.Title = "engine torque [Nm]" chartArea.AxisY.TitleFont = New Font("Helvetica", 10) chartArea.AxisY.LabelStyle.Font = New Font("Helvetica", 8) chartArea.AxisY.LabelAutoFitStyle = LabelAutoFitStyles.None chartArea.AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dot chartArea.AxisX.Minimum = 300 chartArea.BorderDashStyle = ChartDashStyle.Solid chartArea.BorderWidth = 1 chartArea.BackColor = Color.GhostWhite chart.ChartAreas.Add(chartArea) chart.Update() Dim img As Bitmap = New Bitmap(chart.Width, chart.Height, PixelFormat.Format32bppArgb) chart.DrawToBitmap(img, New Rectangle(0, 0, PicBox.Width, PicBox.Height)) PicBox.Image = img End Sub Private Sub UpdateGearboxPic(ByRef chartArea As Chart) Dim s As Series Dim i As Integer Dim gearbox As IGearboxEngineeringInputData = Nothing Dim gearboxFile As String = If(Not String.IsNullOrWhiteSpace(VectoFile), Path.Combine(Path.GetDirectoryName(VectoFile), TbGBX.Text), TbGBX.Text) If File.Exists(gearboxFile) Then Try Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(gearboxFile), IEngineeringInputDataProvider) gearbox = inputData.GearboxInputData Catch End Try End If If gearbox Is Nothing Then Return TbGbxTxt.Text = String.Format("{0}-Speed {1} {2}", gearbox.Gears.Count, gearbox.Type.ShortName(), gearbox.ModelName) If Cfg.DeclMode Then For i = 1 To gearbox.Gears.Count 'If FLD0.Init(ENG0.Nidle) Then '' use engine from below... 'Dim engine As CombustionEngineData = ConvertToEngineData(FLD0, F_VECTO.n_idle) 'Dim shiftLines As ShiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon(Gear - 1, ' engine.FullLoadCurve, gears, ' engine, ' Double.Parse(LvGears.Items(0).SubItems(F_GBX.GearboxTbl.Ratio).Text, ' CultureInfo.InvariantCulture), ' (.rdyn / 1000.0).SI(Of Meter)) 's = New Series 's.Points.DataBindXY(shiftLines.Upshift.Select(Function(pt) pt.AngularSpeed.Value() / Constants.RPMToRad).ToList(), ' shiftLines.Upshift.Select(Function(pt) pt.Torque.Value()).ToList()) 's.ChartType = SeriesChartType.FastLine 's.BorderWidth = 2 's.Color = Color.DarkRed 's.Name = "Upshift curve (" & i & ")" 'MyChart.Series.Add(s) 's = New Series 's.Points.DataBindXY( ' shiftLines.Downshift.Select(Function(pt) pt.AngularSpeed.Value() / Constants.RPMToRad).ToList(), ' shiftLines.Downshift.Select(Function(pt) pt.Torque.Value()).ToList()) 's.ChartType = SeriesChartType.FastLine 's.BorderWidth = 2 's.Color = Color.DarkRed 's.Name = "Downshift curve (" & i & ")" 'MyChart.Series.Add(s) 'End If ' OkCount += 1 ' pmax = FLD0.Pfull(FLD0.EngineRatedSpeed) 'End If Next Else For Each gear As ITransmissionInputData In gearbox.Gears If gear.ShiftPolygon Is Nothing OrElse gear.ShiftPolygon.Rows.Count = 0 Then Continue For Dim shiftPolygon As ShiftPolygon = ShiftPolygonReader.Create(gear.ShiftPolygon) s = New Series s.Points.DataBindXY(shiftPolygon.Upshift.Select(Function(x) x.AngularSpeed.AsRPM).ToArray(), shiftPolygon.Upshift.Select(Function(x) x.Torque.Value()).ToArray()) s.ChartType = SeriesChartType.FastLine s.BorderWidth = 2 s.Color = Color.DarkRed s.Name = "Upshift curve" ' MyChart.Series.Add(s) 'MQ 2016-06-20: do not plot shift lines in engine dialog s = New Series s.Points.DataBindXY(shiftPolygon.Downshift.Select(Function(x) x.AngularSpeed.AsRPM).ToArray(), shiftPolygon.Downshift.Select(Function(x) x.Torque.Value()).ToArray()) s.ChartType = SeriesChartType.FastLine s.BorderWidth = 2 s.Color = Color.DarkRed s.Name = "Downshift curve" 'MyChart.Series.Add(s) 'MQ 2016-06-20:do not plot shift lines in engine dialog Next End If End Sub Private Sub UpdateEnginePic(ByRef chart As Chart) Dim s As Series Dim pmax As Double Dim engine As IEngineEngineeringInputData = Nothing Dim engineFile As String = If(Not String.IsNullOrWhiteSpace(VectoFile), Path.Combine(Path.GetDirectoryName(VectoFile), TbENG.Text), TbENG.Text) If File.Exists(engineFile) Then Try Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(engineFile), IEngineeringInputDataProvider) engine = inputData.EngineInputData Catch Return End Try End If 'engine.FilePath = fFileRepl(TbENG.Text, GetPath(VECTOfile)) 'Create plot chart = New Chart chart.Width = PicBox.Width chart.Height = PicBox.Height 'Dim FLD0 As EngineFullLoadCurve = New EngineFullLoadCurve If engine Is Nothing Then Return engine.IdleSpeed.Value() Dim fullLoadCurve As FullLoadCurve = EngineFullLoadCurve.Create(engine.FullLoadCurve) s = New Series s.Points.DataBindXY(fullLoadCurve.FullLoadEntries.Select(Function(x) x.EngineSpeed.AsRPM).ToArray(), fullLoadCurve.FullLoadEntries.Select(Function(x) x.TorqueFullLoad.Value()).ToArray()) s.ChartType = SeriesChartType.FastLine s.BorderWidth = 2 s.Color = Color.DarkBlue s.Name = "Full load" chart.Series.Add(s) s = New Series s.Points.DataBindXY(fullLoadCurve.FullLoadEntries.Select(Function(x) x.EngineSpeed.AsRPM).ToArray(), fullLoadCurve.FullLoadEntries.Select(Function(x) x.TorqueDrag.Value()).ToArray()) s.ChartType = SeriesChartType.FastLine s.BorderWidth = 2 s.Color = Color.Blue s.Name = "Motoring" chart.Series.Add(s) pmax = fullLoadCurve.MaxPower.Value() / 1000 'FLD0.Pfull(FLD0.EngineRatedSpeed) TbEngTxt.Text = String.Format("{0} l {1} kw {2}", (engine.Displacement.Value() * 1000).ToString("0.0"), pmax.ToString("#"), engine.ModelName) Dim fuelConsumptionMap As FuelConsumptionMap = FuelConsumptionMapReader.Create(engine.FuelConsumptionMap) s = New Series s.Points.DataBindXY(fuelConsumptionMap.Entries.Select(Function(x) x.EngineSpeed.AsRPM).ToArray(), fuelConsumptionMap.Entries.Select(Function(x) x.Torque.Value()).ToArray()) s.ChartType = SeriesChartType.Point s.MarkerSize = 3 s.Color = Color.Red s.Name = "Map" chart.Series.Add(s) End Sub Private Sub UpdateVehiclePic() Dim HDVclass As String Dim vehicle As IVehicleEngineeringInputData = Nothing Dim vehicleFile As String = If(Not String.IsNullOrWhiteSpace(VectoFile), Path.Combine(Path.GetDirectoryName(VectoFile), TbVEH.Text), TbVEH.Text) If File.Exists(vehicleFile) Then Try Dim inputData As IEngineeringInputDataProvider = TryCast(JSONInputDataFactory.ReadComponentData(vehicleFile), IEngineeringInputDataProvider) vehicle = inputData.VehicleInputData Catch End Try End If If vehicle Is Nothing Then Return Dim maxMass As Kilogram = vehicle.GrossVehicleMassRating 'CSng(fTextboxToNumString(TbMassMass.Text)) Dim s0 As Segment = Nothing Try s0 = DeclarationData.Segments.Lookup(vehicle.VehicleCategory, vehicle.AxleConfiguration, maxMass, 0.SI(Of Kilogram), True) Catch End Try If s0 Is Nothing Then HDVclass = "-" Else HDVclass = s0.VehicleClass.GetClassNumber() If Cfg.DeclMode Then LvCycles.Items.Clear() Dim m0 As Mission For Each m0 In s0.Missions LvCycles.Items.Add(m0.MissionType.ToString()) Next End If End If PicVehicle.Image = ConvPicPath(If(s0 Is Nothing, -1, HDVclass.ToInt()), False) _ 'Image.FromFile(cDeclaration.ConvPicPath(HDVclass, False)) TbHVCclass.Text = String.Format("HDV Class {0}", HDVclass) TbVehCat.Text = vehicle.VehicleCategory.GetCategoryName() 'ConvVehCat(VEH0.VehCat, True) TbMass.Text = (vehicle.GrossVehicleMassRating.Value() / 1000) & " t" TbAxleConf.Text = vehicle.AxleConfiguration.GetName() 'ConvAxleConf(VEH0.AxleConf) End Sub #Region "Open File Context Menu" Private _contextMenuFiles As String() Private _basePath As String = "" Private Sub OpenFiles(ParamArray files() As String) If files.Length = 0 Then Exit Sub _contextMenuFiles = files OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName CmOpenFile.Show(Windows.Forms.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 Region 'AA-TB Private Sub picAuxInfo_MouseEnter(sender As Object, e As EventArgs) Handles picAuxInfo.MouseEnter If cboAdvancedAuxiliaries.SelectedIndex = -1 Then Exit Sub 'Get tooltip Dim item As AdvancedAuxiliary item = DirectCast(cboAdvancedAuxiliaries.SelectedItem, AdvancedAuxiliary) If item.AuxiliaryVersion = "CLASSIC" Then ToolTip1.ToolTipTitle = "Classic Vecto Auxiliaries" ToolTip1.SetToolTip(picAuxInfo, "Uses original basic auxiliaries calculation") Else ToolTip1.ToolTipTitle = "Advanced Auxiliary Information" ToolTip1.SetToolTip(picAuxInfo, item.AuxiliaryName & " : Version=" & item.AuxiliaryVersion) End If End Sub 'AA-TB Private Sub btnBrowseAAUXFile_Click(sender As Object, e As EventArgs) Handles btnBrowseAAUXFile.Click If String.IsNullOrEmpty(VectoFile) Then MessageBox.Show( "Please complete and save a valid new .vecto file before adding/configuring advanced bus auxiliaries.") Return End If Dim aauxFileValidated As Boolean = False Dim fbAux As New FileBrowser("aaux", False, False) Dim message As String = String.Empty Dim absoluteAuxPath As String Dim assembly As AdvancedAuxiliary 'If Classic is selected, then bail If cboAdvancedAuxiliaries.SelectedIndex = 0 Then Return 'Get Absolute Path for AAUX FILE. absoluteAuxPath = ResolveAAUXFilePath(GetPath(VectoFile), txtAdvancedAuxiliaryFile.Text) 'Set Extensions fbAux.Extensions = New String() {"AAUX"} Try assembly = DirectCast(cboAdvancedAuxiliaries.SelectedItem, AdvancedAuxiliary) Dim validAAUXFile As Boolean = ValidateAAUXFile(absoluteAuxPath, assembly.AssemblyName, assembly.AuxiliaryVersion, message) Dim fileExists As Boolean = File.Exists(absoluteAuxPath) If fileExists AndAlso validAAUXFile Then ConfigureAdvancedAuxiliaries(assembly.AssemblyName, assembly.AuxiliaryVersion, txtAdvancedAuxiliaryFile.Text, VectoFile) Else Dim needToFindOrCreateFile As Boolean = True While needToFindOrCreateFile 'Find / Create file and configure. If fbAux.CustomDialog(absoluteAuxPath, False, False, FileBrowserFileExtensionMode.ForceExt, False, String.Empty) _ Then txtAdvancedAuxiliaryFile.Text = GetFilenameWithoutDirectory(fbAux.Files(0), GetPath(VectoFile)) assembly = DirectCast(cboAdvancedAuxiliaries.SelectedItem, AdvancedAuxiliary) If _ File.Exists(ResolveAAUXFilePath(GetPath(VectoFile), txtAdvancedAuxiliaryFile.Text)) OrElse MsgBox("Do you want to create a new .AAUX file?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then needToFindOrCreateFile = False ConfigureAdvancedAuxiliaries(assembly.AssemblyName, assembly.AuxiliaryVersion, txtAdvancedAuxiliaryFile.Text, VectoFile) End If Else needToFindOrCreateFile = False End If End While End If Catch ex As Exception MessageBox.Show("There was an error configuring your Advanced Auxiliary File") End Try End Sub 'AA-TB Private Sub cboAdvancedAuxiliaries_SelectedIndexChanged(sender As Object, e As EventArgs) _ Handles cboAdvancedAuxiliaries.SelectedIndexChanged 'Enable or otherwise the text box and browser button associated with Advanced Axuiliaries If cboAdvancedAuxiliaries.SelectedIndex = 0 Then btnBrowseAAUXFile.Enabled = False txtAdvancedAuxiliaryFile.Enabled = False Else btnBrowseAAUXFile.Enabled = True txtAdvancedAuxiliaryFile.Enabled = True End If End Sub 'AA-TB Private Sub btnAAUXOpen_Click(sender As Object, e As EventArgs) Handles btnAAUXOpen.Click OpenFiles(FileRepl(txtAdvancedAuxiliaryFile.Text, GetPath(VectoFile))) End Sub Private Sub btnDfTargetSpeed_Click(sender As Object, e As EventArgs) Handles btnDfTargetSpeed.Click If DriverDecisionFactorTargetSpeedFileBrowser.OpenDialog(FileRepl(tbLacDfTargetSpeedFile.Text, GetPath(VectoFile))) _ Then _ tbLacDfTargetSpeedFile.Text = GetFilenameWithoutDirectory(DriverDecisionFactorTargetSpeedFileBrowser.Files(0), GetPath(VectoFile)) End Sub Private Sub btnDfVelocityDrop_Click_1(sender As Object, e As EventArgs) Handles btnDfVelocityDrop.Click If DriverDecisionFactorVelocityDropFileBrowser.OpenDialog(FileRepl(tbLacDfVelocityDropFile.Text, GetPath(VectoFile))) _ Then _ tbLacDfVelocityDropFile.Text = GetFilenameWithoutDirectory(DriverDecisionFactorVelocityDropFileBrowser.Files(0), GetPath(VectoFile)) End Sub Private Sub Label6_Click(sender As Object, e As EventArgs) Handles Label6.Click End Sub End Class