diff --git a/VECTO/GUI/F_MAINForm.vb b/VECTO/GUI/F_MAINForm.vb index a5a90a7ec8b482964601fd45bc079235932acb19..6f734809040ac730dc015f2a2d5a4b32504679fe 100644 --- a/VECTO/GUI/F_MAINForm.vb +++ b/VECTO/GUI/F_MAINForm.vb @@ -1,24 +1,47 @@ -' 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. +' This file is part of VECTO. +' +' Copyright © 2012-2016 European Union +' +' Developed by Graz University of Technology, +' Institute of Internal Combustion Engines and Thermodynamics, +' Institute of Technical Informatics +' +' VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +' by the European Commission - subsequent versions of the EUPL (the "Licence"); +' You may not use VECTO except in compliance with the Licence. +' You may obtain a copy of the Licence at: +' +' https://joinup.ec.europa.eu/community/eupl/og_page/eupl +' +' Unless required by applicable law or agreed to in writing, VECTO +' distributed under the Licence is distributed on an "AS IS" basis, +' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +' See the Licence for the specific language governing permissions and +' limitations under the Licence. +' +' Authors: +' Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +' Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +' Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +' Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +' Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +' Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology ' -' See the LICENSE.txt for the specific language governing permissions and limitations. Imports System.Collections.Generic Imports System.ComponentModel Imports System.IO Imports System.Linq Imports System.Reflection -Imports System.Threading Imports TUGraz.VectoCore.Models.Simulation.Impl Imports TUGraz.VectoCore.InputData Imports TUGraz.VectoCore.InputData.FileIO.JSON Imports System.Text +Imports System.Threading +Imports NLog +Imports NLog.Config +Imports NLog.Targets Imports TUGraz.VectoCore.OutputData Imports TUGraz.VectoCore.OutputData.FileIO @@ -28,419 +51,419 @@ Imports TUGraz.VectoCore.OutputData.FileIO ''' <remarks></remarks> Public Class F_MAINForm - Private JobListView As cFileListView - Private CycleListView As cFileListView + Private JobListView As cFileListView + Private CycleListView As cFileListView - Private LastModeName As String - Private ConMenTarget As ListView - Private ConMenTarJob As Boolean + Private LastModeName As String + Private ConMenTarget As ListView + Private ConMenTarJob As Boolean - Private MODpath As String - Private MODVehList As Int32() + Private MODpath As String + Private MODVehList As Int32() - Private CycleTabPage As TabPage - Private CycleTabPageVisible As Boolean + Private CycleTabPage As TabPage + Private CycleTabPageVisible As Boolean - Private ComLineShutDown As Boolean + Private ComLineShutDown As Boolean - Private GUIlocked As Boolean + Private GUIlocked As Boolean - Private CheckedItems As List(Of ListViewItem) + Private CheckedItems As List(Of ListViewItem) - Private DEVpage As TabPage - Private CmDEVitem As ListViewItem + Private DEVpage As TabPage + Private CmDEVitem As ListViewItem - Private CheckLock As Boolean - Private GENchecked As Integer - Private DRIchecked As Integer - Private GENcheckAllLock As Boolean - Private DRIcheckAllLock As Boolean + Private CheckLock As Boolean + Private GENchecked As Integer + Private DRIchecked As Integer + Private GENcheckAllLock As Boolean + Private DRIcheckAllLock As Boolean - Private CbDeclLock As Boolean = False + Private CbDeclLock As Boolean = False #Region "SLEEP Control - Prevent sleep while VECTO is running" - Private Declare Function SetThreadExecutionState Lib "kernel32" (ByVal esFlags As Long) As Long + Private Declare Function SetThreadExecutionState Lib "kernel32" (ByVal esFlags As Long) As Long - Private Sub AllowSleepOFF() + Private Sub AllowSleepOFF() #If Not PLATFORM = "x86" Then - SetThreadExecutionState(tEXECUTION_STATE.ES_CONTINUOUS Or tEXECUTION_STATE.ES_SYSTEM_REQUIRED) + SetThreadExecutionState(tEXECUTION_STATE.ES_CONTINUOUS Or tEXECUTION_STATE.ES_SYSTEM_REQUIRED) #End If - End Sub + End Sub - Private Sub AllowSleepON() + Private Sub AllowSleepON() #If Not PLATFORM = "x86" Then - SetThreadExecutionState(tEXECUTION_STATE.ES_CONTINUOUS) + SetThreadExecutionState(tEXECUTION_STATE.ES_CONTINUOUS) #End If - End Sub + End Sub - Private Enum tEXECUTION_STATE As Integer - ''' Informs the system that the state being set should remain in effect until the next call that uses ES_CONTINUOUS and one of the other state flags is cleared. - ES_CONTINUOUS = &H80000000 - ''' Forces the display to be on by resetting the display idle timer. - ES_DISPLAY_REQUIRED = &H2 - ''' Forces the system to be in the working state by resetting the system idle timer. - ES_SYSTEM_REQUIRED = &H1 - End Enum + Private Enum tEXECUTION_STATE As Integer + ''' Informs the system that the state being set should remain in effect until the next call that uses ES_CONTINUOUS and one of the other state flags is cleared. + ES_CONTINUOUS = &H80000000 + ''' Forces the display to be on by resetting the display idle timer. + ES_DISPLAY_REQUIRED = &H2 + ''' Forces the system to be in the working state by resetting the system idle timer. + ES_SYSTEM_REQUIRED = &H1 + End Enum #End Region #Region "FileBrowser Init/Close" - Private Sub FB_Initialize() - FB_Init = False - Try - VECTO_Global.COREvers = Assembly.LoadFrom("VectoCore.dll").GetName().Version.ToString() - Catch ex As Exception - LogFile.WriteToLog(tMsgID.Err, ex.StackTrace) - End Try - - - fbFolder = New cFileBrowser("WorkDir", True) - fbFileLists = New cFileBrowser("FileLists") - fbVECTO = New cFileBrowser("vecto") - fbVEH = New cFileBrowser("vveh") - fbMAP = New cFileBrowser("vmap") - fbDRI = New cFileBrowser("vdri") - fbFLD = New cFileBrowser("vfld") - fbENG = New cFileBrowser("veng") - fbGBX = New cFileBrowser("vgbx") - fbACC = New cFileBrowser("vacc") - fbAUX = New cFileBrowser("vaux") - fbGBS = New cFileBrowser("vgbs") - fbRLM = New cFileBrowser("vrlm") - fbTLM = New cFileBrowser("vtlm") - fbTCC = New cFileBrowser("vtcc") - fbCDx = New cFileBrowser("vcdx") - - fbVMOD = New cFileBrowser("vmod") - - - '------------------------------------------------------- - fbFileLists.Extensions = New String() {"txt"} - fbVECTO.Extensions = New String() {"vecto"} - fbVEH.Extensions = New String() {"vveh"} - fbMAP.Extensions = New String() {"vmap"} - fbDRI.Extensions = New String() {"vdri"} - fbFLD.Extensions = New String() {"vfld"} - fbENG.Extensions = New String() {"veng"} - fbGBX.Extensions = New String() {"vgbx"} - fbACC.Extensions = New String() {"vacc"} - fbAUX.Extensions = New String() {"vaux"} - fbGBS.Extensions = New String() {"vgbs"} - fbRLM.Extensions = New String() {"vrlm"} - fbTLM.Extensions = New String() {"vtlm"} - fbTCC.Extensions = New String() {"vtcc"} - fbCDx.Extensions = New String() {"vcdv", "vcdb"} - - fbVMOD.Extensions = New String() {"vmod"} - End Sub - - Private Sub FB_Close() - fbFolder.Close() - fbFileLists.Close() - fbVECTO.Close() - fbVEH.Close() - fbMAP.Close() - fbDRI.Close() - fbFLD.Close() - fbENG.Close() - fbGBX.Close() - fbACC.Close() - fbAUX.Close() - fbGBS.Close() - fbRLM.Close() - fbTLM.Close() - fbTCC.Close() - fbCDx.Close() - fbVMOD.Close() - End Sub + Private Sub FB_Initialize() + FB_Init = False + Try + VECTO_Global.COREvers = Assembly.LoadFrom("VectoCore.dll").GetName().Version.ToString() + Catch ex As Exception + LogFile.WriteToLog(tMsgID.Err, ex.StackTrace) + End Try + + + fbFolder = New cFileBrowser("WorkDir", True) + fbFileLists = New cFileBrowser("FileLists") + fbVECTO = New cFileBrowser("vecto") + fbVEH = New cFileBrowser("vveh") + fbMAP = New cFileBrowser("vmap") + fbDRI = New cFileBrowser("vdri") + fbFLD = New cFileBrowser("vfld") + fbENG = New cFileBrowser("veng") + fbGBX = New cFileBrowser("vgbx") + fbACC = New cFileBrowser("vacc") + fbAUX = New cFileBrowser("vaux") + fbGBS = New cFileBrowser("vgbs") + fbRLM = New cFileBrowser("vrlm") + fbTLM = New cFileBrowser("vtlm") + fbTCC = New cFileBrowser("vtcc") + fbCDx = New cFileBrowser("vcdx") + + fbVMOD = New cFileBrowser("vmod") + + + '------------------------------------------------------- + fbFileLists.Extensions = New String() {"txt"} + fbVECTO.Extensions = New String() {"vecto"} + fbVEH.Extensions = New String() {"vveh"} + fbMAP.Extensions = New String() {"vmap"} + fbDRI.Extensions = New String() {"vdri"} + fbFLD.Extensions = New String() {"vfld"} + fbENG.Extensions = New String() {"veng"} + fbGBX.Extensions = New String() {"vgbx"} + fbACC.Extensions = New String() {"vacc"} + fbAUX.Extensions = New String() {"vaux"} + fbGBS.Extensions = New String() {"vgbs"} + fbRLM.Extensions = New String() {"vrlm"} + fbTLM.Extensions = New String() {"vtlm"} + fbTCC.Extensions = New String() {"vtcc"} + fbCDx.Extensions = New String() {"vcdv", "vcdb"} + + fbVMOD.Extensions = New String() {"vmod"} + End Sub + + Private Sub FB_Close() + fbFolder.Close() + fbFileLists.Close() + fbVECTO.Close() + fbVEH.Close() + fbMAP.Close() + fbDRI.Close() + fbFLD.Close() + fbENG.Close() + fbGBX.Close() + fbACC.Close() + fbAUX.Close() + fbGBS.Close() + fbRLM.Close() + fbTLM.Close() + fbTCC.Close() + fbCDx.Close() + fbVMOD.Close() + End Sub #End Region #Region "VECTO-Worker" - 'VECTO-Launcher - Public Sub VECTO_Launcher() - Dim ProgOverall As Boolean - Dim GEN0 As cVECTO - - 'Called when VECTO already running - If VECTOworker.IsBusy Then - GUImsg(tMsgID.Err, "VECTO is already running!") - Exit Sub - End If - - 'Delete GENlist-Selection - Me.LvGEN.SelectedItems.Clear() - - 'If more than 100 calculations, ask whether to write by-second results - If _ - Cfg.BatchMode And ((Me.LvGEN.CheckedItems.Count) * (Me.LvDRI.CheckedItems.Count) > 100) And - Me.ChBoxModOut.Checked _ - Then - Select Case _ - MsgBox( - "You are about to run Batch Mode with " & - (Me.LvGEN.CheckedItems.Count) * (Me.LvDRI.CheckedItems.Count) & - " calculations!" & ChrW(10) & "Do you still want to write modal results?", MsgBoxStyle.YesNoCancel) - Case MsgBoxResult.No - Me.ChBoxModOut.Checked = False - Case MsgBoxResult.Cancel - GUImsg(tMsgID.Normal, "Aborted by User") - Exit Sub - End Select - End If - - 'Status - Status("Launching VECTO...") - - - 'Define Job-0list - - 'Define File / Cycle list - SetJobList() - - 'Zyklus-Liste definieren (falls nicht BATCH-Modus wird in SetCycleList nur die Liste gelöscht und nicht neu belegt) |@@| Define Cycle-list (if not BATCH mode in SetCycleList deleted only the list and not reassigned) - SetCycleList() - - If JobFileList.Count = 0 Then - GUImsg(tMsgID.Err, "No job file selected!") - Exit Sub - End If - - 'Check whether Overall-progbar is needed - If Cfg.BatchMode Or JobFileList.Count > 1 Or Cfg.DeclMode Then - ProgOverall = True - Else - GEN0 = New cVECTO - GEN0.FilePath = JobFileList(0) - If Not GEN0.ReadFile Then - GUImsg(tMsgID.Err, "Failed to job file (" & fFILE(JobFileList(0), True) & ")!") - Exit Sub - End If - ProgOverall = (GEN0.CycleFiles.Count > 1) - End If - - 'Launch through Job_Launcher - Job_Launcher(ProgOverall) - End Sub - - 'Lock certain GUI elements while VECTO is running - Private Sub LockGUI(ByVal Lock As Boolean) - GUIlocked = Lock - - Me.PanelOptAllg.Enabled = Not Lock - Me.GrBoxSTD.Enabled = Not Lock - Me.GrBoxBATCH.Enabled = Not Lock - - Me.BtGENup.Enabled = Not Lock - Me.BtGENdown.Enabled = Not Lock - Me.ButtonGENadd.Enabled = Not Lock - Me.ButtonGENremove.Enabled = Not Lock - Me.LvGEN.LabelEdit = Not Lock - Me.ChBoxAllGEN.Enabled = Not Lock - - Me.BtDRIup.Enabled = Not Lock - Me.BtDRIdown.Enabled = Not Lock - Me.ButtonDRIadd.Enabled = Not Lock - Me.ButtonDRIremove.Enabled = Not Lock - Me.LvDRI.LabelEdit = Not Lock - Me.ChBoxAllDRI.Enabled = Not Lock - - Button1.Enabled = Not Lock - btStartV3.Enabled = Not Lock - - If DEV.Enabled Then - Me.LvDEVoptions.Enabled = Not Lock - End If - End Sub - - 'Define job file list - Private Sub SetJobList() - Dim LV0 As ListViewItem - Dim x As Integer - - JobFileList.Clear() - CheckedItems.Clear() - - x = -1 - For Each LV0 In Me.LvGEN.CheckedItems - x += 1 - LV0.SubItems(1).Text = "" - CheckedItems.Add(LV0) - SetCheckedItemColor(x, tJobStatus.Queued) - JobFileList.Add(fFileRepl(LV0.SubItems(0).Text)) - Next - End Sub - - 'Define cycle list (BATCH mode only) - Private Sub SetCycleList() - Dim LV0 As ListViewItem - - JobCycleList.Clear() - - If Cfg.BatchMode Then - For Each LV0 In Me.LvDRI.CheckedItems - JobCycleList.Add(fFileRepl(LV0.SubItems(0).Text)) - Next - End If - End Sub - - 'Job Launcher - Private Sub Job_Launcher(ByVal ProgOverallEnabled As Boolean) - - If VECTOworker.IsBusy Then Exit Sub - - 'Load Options from Options Tab - SetOptions() - - 'Save Config - Cfg.ConfigSAVE() - - If DEV.Enabled Then DEV.SaveToFile() - - 'Reset Msg-output - ClearMSG() - - 'Disable Options - LockGUI(True) - - 'Button switch - Button1.Enabled = True - Me.Button1.Text = "STOP" - Me.Button1.Image = My.Resources.Stop_icon - - 'ProgBars start - If ProgOverallEnabled Then - Me.ToolStripProgBarOverall.Value = 0 - Me.ToolStripProgBarOverall.Style = ProgressBarStyle.Marquee - Me.ToolStripProgBarOverall.Visible = True - End If - - ProgBarCtrl.ProgJobInt = 0 - ProgSecStart() - - 'BG-Worker start - VECTOworker.RunWorkerAsync() - End Sub - - 'Abort Job - Private Sub JobAbort() - Me.Button1.Enabled = False - Me.Button1.Text = "Aborting..." - Me.Button1.Image = My.Resources.Play_icon_gray - VECTOworker.CancelAsync() - End Sub + 'VECTO-Launcher + Public Sub VECTO_Launcher() + Dim ProgOverall As Boolean + Dim GEN0 As cVECTO + + 'Called when VECTO already running + If VECTOworker.IsBusy Then + GUImsg(tMsgID.Err, "VECTO is already running!") + Exit Sub + End If + + 'Delete GENlist-Selection + Me.LvGEN.SelectedItems.Clear() + + 'If more than 100 calculations, ask whether to write by-second results + If _ + Cfg.BatchMode And ((Me.LvGEN.CheckedItems.Count) * (Me.LvDRI.CheckedItems.Count) > 100) And + Me.ChBoxModOut.Checked _ + Then + Select Case _ + MsgBox( + "You are about to run Batch Mode with " & + (Me.LvGEN.CheckedItems.Count) * (Me.LvDRI.CheckedItems.Count) & + " calculations!" & ChrW(10) & "Do you still want to write modal results?", MsgBoxStyle.YesNoCancel) + Case MsgBoxResult.No + Me.ChBoxModOut.Checked = False + Case MsgBoxResult.Cancel + GUImsg(tMsgID.Normal, "Aborted by User") + Exit Sub + End Select + End If + + 'Status + Status("Launching VECTO...") + + + 'Define Job-0list + + 'Define File / Cycle list + SetJobList() + + 'Zyklus-Liste definieren (falls nicht BATCH-Modus wird in SetCycleList nur die Liste gelöscht und nicht neu belegt) |@@| Define Cycle-list (if not BATCH mode in SetCycleList deleted only the list and not reassigned) + SetCycleList() + + If JobFileList.Count = 0 Then + GUImsg(tMsgID.Err, "No job file selected!") + Exit Sub + End If + + 'Check whether Overall-progbar is needed + If Cfg.BatchMode Or JobFileList.Count > 1 Or Cfg.DeclMode Then + ProgOverall = True + Else + GEN0 = New cVECTO + GEN0.FilePath = JobFileList(0) + If Not GEN0.ReadFile Then + GUImsg(tMsgID.Err, "Failed to job file (" & fFILE(JobFileList(0), True) & ")!") + Exit Sub + End If + ProgOverall = (GEN0.CycleFiles.Count > 1) + End If + + 'Launch through Job_Launcher + Job_Launcher(ProgOverall) + End Sub + + 'Lock certain GUI elements while VECTO is running + Private Sub LockGUI(ByVal Lock As Boolean) + GUIlocked = Lock + + Me.PanelOptAllg.Enabled = Not Lock + Me.GrBoxSTD.Enabled = Not Lock + Me.GrBoxBATCH.Enabled = Not Lock + + Me.BtGENup.Enabled = Not Lock + Me.BtGENdown.Enabled = Not Lock + Me.ButtonGENadd.Enabled = Not Lock + Me.ButtonGENremove.Enabled = Not Lock + Me.LvGEN.LabelEdit = Not Lock + Me.ChBoxAllGEN.Enabled = Not Lock + + Me.BtDRIup.Enabled = Not Lock + Me.BtDRIdown.Enabled = Not Lock + Me.ButtonDRIadd.Enabled = Not Lock + Me.ButtonDRIremove.Enabled = Not Lock + Me.LvDRI.LabelEdit = Not Lock + Me.ChBoxAllDRI.Enabled = Not Lock + + Button1.Enabled = Not Lock + btStartV3.Enabled = Not Lock + + If DEV.Enabled Then + Me.LvDEVoptions.Enabled = Not Lock + End If + End Sub + + 'Define job file list + Private Sub SetJobList() + Dim LV0 As ListViewItem + Dim x As Integer + + JobFileList.Clear() + CheckedItems.Clear() + + x = -1 + For Each LV0 In Me.LvGEN.CheckedItems + x += 1 + LV0.SubItems(1).Text = "" + CheckedItems.Add(LV0) + SetCheckedItemColor(x, tJobStatus.Queued) + JobFileList.Add(fFileRepl(LV0.SubItems(0).Text)) + Next + End Sub + + 'Define cycle list (BATCH mode only) + Private Sub SetCycleList() + Dim LV0 As ListViewItem + + JobCycleList.Clear() + + If Cfg.BatchMode Then + For Each LV0 In Me.LvDRI.CheckedItems + JobCycleList.Add(fFileRepl(LV0.SubItems(0).Text)) + Next + End If + End Sub + + 'Job Launcher + Private Sub Job_Launcher(ByVal ProgOverallEnabled As Boolean) + + If VECTOworker.IsBusy Then Exit Sub + + 'Load Options from Options Tab + SetOptions() + + 'Save Config + Cfg.ConfigSAVE() + + If DEV.Enabled Then DEV.SaveToFile() + + 'Reset Msg-output + ClearMSG() + + 'Disable Options + LockGUI(True) + + 'Button switch + Button1.Enabled = True + Me.Button1.Text = "STOP" + Me.Button1.Image = My.Resources.Stop_icon + + 'ProgBars start + If ProgOverallEnabled Then + Me.ToolStripProgBarOverall.Value = 0 + Me.ToolStripProgBarOverall.Style = ProgressBarStyle.Marquee + Me.ToolStripProgBarOverall.Visible = True + End If + + ProgBarCtrl.ProgJobInt = 0 + ProgSecStart() + + 'BG-Worker start + VECTOworker.RunWorkerAsync() + End Sub + + 'Abort Job + Private Sub JobAbort() + Me.Button1.Enabled = False + Me.Button1.Text = "Aborting..." + Me.Button1.Image = My.Resources.Play_icon_gray + VECTOworker.CancelAsync() + End Sub #Region "BackgroundWorker Events" - 'DoWork - Start Calculations - Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) _ - Handles BackgroundWorker1.DoWork - - 'Prevent SLEEP - AllowSleepOFF() - - If SetCulture Then - Try - System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US") - Catch ex As Exception - GUImsg(tMsgID.Err, "Failed to set thread culture 'en-US'! Check system decimal- and group- separators!") - End Try - End If - - e.Result = VECTO() - End Sub - - 'Progress Report - Progressbar, Messages, etc. - Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, - ByVal e As System.ComponentModel.ProgressChangedEventArgs) _ - Handles BackgroundWorker1.ProgressChanged - Dim x As cWorkProg - x = e.UserState - - Select Case x.Target - Case tWorkMsgType.StatusListBox - MSGtoForm(e.UserState.ID, e.UserState.Msg, x.Source, x.Link) - - Case tWorkMsgType.StatusBar - Status(e.UserState.Msg) - - Case tWorkMsgType.ProgBars - Me.ToolStripProgBarOverall.Value = e.ProgressPercentage - ProgSecStart() - - Case tWorkMsgType.JobStatus - CheckedItems(x.FileIndex).SubItems(1).Text = x.Msg - SetCheckedItemColor(x.FileIndex, x.Status) - - Case tWorkMsgType.CycleStatus - Try - Me.LvDRI.CheckedItems(x.FileIndex).SubItems(1).Text = x.Msg - Catch ex As Exception - End Try - - Case tWorkMsgType.InitProgBar - Me.ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous - - Case Else ' tWorkMsgType.Abort - JobAbort() - - End Select - End Sub - - 'Work completed - Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, - ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _ - Handles BackgroundWorker1.RunWorkerCompleted - - Dim Result As tCalcResult - - 'Progbar reset - Me.ToolStripProgBarOverall.Visible = False - Me.ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous - Me.ToolStripProgBarOverall.Value = 0 - ProgSecStop() - - 'So ListView-Item Colors (Warning = Yellow, etc..) are correctly visible - Me.LvGEN.SelectedIndices.Clear() - - Result = e.Result - - 'ShutDown when Unexpected Error - If e.Error IsNot Nothing Then - MsgBox("An Unexpected Error occurred!" & ChrW(10) & ChrW(10) & - e.Error.Message.ToString, MsgBoxStyle.Critical, "Unexpected Error") - LogFile.WriteToLog(tMsgID.Err, ">>>Unexpected Error:" & e.Error.ToString()) - Me.Close() - End If - - 'Options enable / GUI reset - LockGUI(False) - Me.Button1.Text = "START V2.2" - Me.Button1.Image = My.Resources.Play_icon - Status(LastModeName & " Mode") - - 'Command Line Shutdown - If ComLineShutDown Then Me.Close() - - 'Auto Shutdown - If Me.ChBoxAutoSD.Checked Then - Me.ChBoxAutoSD.Checked = False - If Not Result = tCalcResult.Abort Then - If F_ShutDown.ShutDown Then - GUImsg(tMsgID.Warn, "Shutting down...") - Me.Close() - End If - End If - End If - - 'SLEEP reactivate - AllowSleepON() - End Sub + 'DoWork - Start Calculations + Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) _ + Handles BackgroundWorker1.DoWork + + 'Prevent SLEEP + AllowSleepOFF() + + If SetCulture Then + Try + System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US") + Catch ex As Exception + GUImsg(tMsgID.Err, "Failed to set thread culture 'en-US'! Check system decimal- and group- separators!") + End Try + End If + + e.Result = VECTO() + End Sub + + 'Progress Report - Progressbar, Messages, etc. + Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, + ByVal e As System.ComponentModel.ProgressChangedEventArgs) _ + Handles BackgroundWorker1.ProgressChanged + Dim x As cWorkProg + x = e.UserState + + Select Case x.Target + Case tWorkMsgType.StatusListBox + MSGtoForm(e.UserState.ID, e.UserState.Msg, x.Source, x.Link) + + Case tWorkMsgType.StatusBar + Status(e.UserState.Msg) + + Case tWorkMsgType.ProgBars + Me.ToolStripProgBarOverall.Value = e.ProgressPercentage + ProgSecStart() + + Case tWorkMsgType.JobStatus + CheckedItems(x.FileIndex).SubItems(1).Text = x.Msg + SetCheckedItemColor(x.FileIndex, x.Status) + + Case tWorkMsgType.CycleStatus + Try + Me.LvDRI.CheckedItems(x.FileIndex).SubItems(1).Text = x.Msg + Catch ex As Exception + End Try + + Case tWorkMsgType.InitProgBar + Me.ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous + + Case Else ' tWorkMsgType.Abort + JobAbort() + + End Select + End Sub + + 'Work completed + Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, + ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _ + Handles BackgroundWorker1.RunWorkerCompleted + + Dim Result As tCalcResult + + 'Progbar reset + Me.ToolStripProgBarOverall.Visible = False + Me.ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous + Me.ToolStripProgBarOverall.Value = 0 + ProgSecStop() + + 'So ListView-Item Colors (Warning = Yellow, etc..) are correctly visible + Me.LvGEN.SelectedIndices.Clear() + + Result = e.Result + + 'ShutDown when Unexpected Error + If e.Error IsNot Nothing Then + MsgBox("An Unexpected Error occurred!" & ChrW(10) & ChrW(10) & + e.Error.Message.ToString, MsgBoxStyle.Critical, "Unexpected Error") + LogFile.WriteToLog(tMsgID.Err, ">>>Unexpected Error:" & e.Error.ToString()) + Me.Close() + End If + + 'Options enable / GUI reset + LockGUI(False) + Me.Button1.Text = "START V2.2" + Me.Button1.Image = My.Resources.Play_icon + Status(LastModeName & " Mode") + + 'Command Line Shutdown + If ComLineShutDown Then Me.Close() + + 'Auto Shutdown + If Me.ChBoxAutoSD.Checked Then + Me.ChBoxAutoSD.Checked = False + If Not Result = tCalcResult.Abort Then + If F_ShutDown.ShutDown Then + GUImsg(tMsgID.Warn, "Shutting down...") + Me.Close() + End If + End If + End If + + 'SLEEP reactivate + AllowSleepON() + End Sub #End Region @@ -448,580 +471,605 @@ Public Class F_MAINForm #Region "Form Init/Close" - 'Initialise - Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load - Dim x As Integer + 'Initialise + Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Dim x As Integer - GUIlocked = False - CheckLock = False - GENcheckAllLock = False - DRIcheckAllLock = False - DRIchecked = 0 - GENchecked = 0 + GUIlocked = False + CheckLock = False + GENcheckAllLock = False + DRIcheckAllLock = False + DRIchecked = 0 + GENchecked = 0 - CheckedItems = New List(Of ListViewItem) + CheckedItems = New List(Of ListViewItem) - 'Load Tabs properly (otherwise problem with ListViews) - For x = 0 To Me.TabControl1.TabCount - 1 - Me.TabControl1.TabPages(x).Show() - Next - - CycleTabPageVisible = True - CycleTabPage = Me.TabPageDRI - - DEVpage = Me.TabPageDEV - 'Me.TabControl1.Controls.Remove(DEVpage) - - LastModeName = "" - - ComLineShutDown = False + 'Load Tabs properly (otherwise problem with ListViews) + For x = 0 To Me.TabControl1.TabCount - 1 + Me.TabControl1.TabPages(x).Show() + Next - FB_Initialize() + CycleTabPageVisible = True + CycleTabPage = Me.TabPageDRI - Me.Text = "VECTO " & VECTOvers & " / VectoCore " & COREvers + DEVpage = Me.TabPageDEV + 'Me.TabControl1.Controls.Remove(DEVpage) + LastModeName = "" - 'FileLists - JobListView = New cFileListView(MyConfPath & "joblist.txt") - JobListView.LVbox = Me.LvGEN - CycleListView = New cFileListView(MyConfPath & "cyclelist.txt") - CycleListView.LVbox = Me.LvDRI - - JobListView.LoadList() + ComLineShutDown = False - 'Load GUI Options (here, the GEN/ADV/DRI lists are loaded) - LoadOptions() + FB_Initialize() + + Me.Text = "VECTO " & VECTOvers & " / VectoCore " & COREvers + + + 'FileLists + JobListView = New cFileListView(MyConfPath & "joblist.txt") + JobListView.LVbox = Me.LvGEN + CycleListView = New cFileListView(MyConfPath & "cyclelist.txt") + CycleListView.LVbox = Me.LvDRI + + JobListView.LoadList() + + 'Load GUI Options (here, the GEN/ADV/DRI lists are loaded) + LoadOptions() + + 'Resize columns ... after Loading the @file-lists + Me.LvGEN.Columns(1).Width = -2 + Me.LvDRI.Columns(1).Width = -2 + Me.LvMsg.Columns(2).Width = -2 + + 'Initialize BackgroundWorker + VECTOworker = Me.BackgroundWorker1 + VECTOworker.WorkerReportsProgress = True + VECTOworker.WorkerSupportsCancellation = True + + VECTOworkerV3 = New BackgroundWorker() + AddHandler VECTOworkerV3.DoWork, AddressOf VectoWorkerV3_OnDoWork + AddHandler VECTOworkerV3.ProgressChanged, AddressOf VectoWorkerV3_OnProgressChanged + AddHandler VECTOworkerV3.RunWorkerCompleted, AddressOf VectoWorkerV3_OnRunWorkerCompleted + + VECTOworkerV3.WorkerReportsProgress = True + VECTOworkerV3.WorkerSupportsCancellation = True + + + 'Set mode (Batch/Standard) + ModeUpdate() + + 'License check + If False And Not Lic.LICcheck() Then + MsgBox("License File invalid!" & vbCrLf & vbCrLf & Lic.FailMsg) + If Lic.CreateActFile(MyAppPath & "ActivationCode.dat") Then + MsgBox("Activation File created.") + Else + MsgBox("Failed to create Activation File! Is Directory Read-Only?") + End If + Me.Close() + Else + GUImsg(tMsgID.Normal, "License File validated.") + If Lic.TimeWarn Then GUImsg(tMsgID.Warn, "License expiring date (y/m/d): " & Lic.ExpTime) + End If + + DEV.Enabled = True ' Lic.LicFeature(9) + + If DEV.Enabled Then + DEV.LoadFromFile() + LoadDEVconfigs() + End If + + DeclOnOff() + + 'Init Log Writer for Listening to VectoCore Nlog + Dim config As LoggingConfiguration = LogManager.Configuration + + Dim methodCallTarget As MethodCallTarget = New MethodCallTarget() + methodCallTarget.ClassName = "VECTO.F_MAINForm, vecto" + methodCallTarget.MethodName = "LogMessage" + methodCallTarget.Name = "WarningLogger" + methodCallTarget.Parameters.Add(New MethodCallParameter("${level}")) + methodCallTarget.Parameters.Add(New MethodCallParameter("${message}")) + config.LoggingRules.Add(New LoggingRule("*", LogLevel.Warn, methodCallTarget)) + LogManager.Configuration = config + End Sub + + Public Shared Sub LogMessage(level As String, message As String) + Try + If level = "Warn" Then + VECTOworkerV3.ReportProgress(100, New With {.Target = "ListBoxWarning", .Message = message}) + ElseIf level = "Error" Or level = "Fatal" Then + VECTOworkerV3.ReportProgress(100, New With {.Target = "ListBoxError", .Message = message}) + + End If + Catch e As InvalidOperationException + + End Try + End Sub + + 'Declaration mode GUI settings + Private Sub DeclOnOff() + + If Cfg.DeclMode Then + Me.Text = "VECTO " & VECTOvers & " / VectoCore " & COREvers & " - Declaration Mode" + Me.CbBatch.Checked = False + Cfg.DeclInit() + Else + Me.Text = "VECTO " & VECTOvers & " / VectoCore " & COREvers + End If + + If Cfg.DeclMode Then + LastModeName = "Declaration" + Else + If Cfg.BatchMode Then + LastModeName = "Batch" + Else + LastModeName = "Engineering" + End If + End If + + If DEV.Enabled Then + If Not Cfg.DeclMode Then + If Not Me.TabControl1.TabPages.Contains(DEVpage) Then _ + Me.TabControl1.TabPages.Insert(Me.TabControl1.TabPages.Count, DEVpage) + LoadDEVconfigs() + Else + If Me.TabControl1.TabPages.Contains(DEVpage) Then Me.TabControl1.Controls.Remove(DEVpage) + DEV.SetDefault() + End If + End If + + Status(LastModeName & " Mode") + + Me.LoadOptions() + + Me.LbDecl.Visible = Cfg.DeclMode + + Me.PnDeclOpt.Enabled = Not Cfg.DeclMode + End Sub + + 'Shown Event (Form-Load finished) ... here StartUp Forms are loaded (DEV, GEN/ADV- Editor ..) + Private Sub F01_MAINForm_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Dim fwelcome As F_Welcome + + 'DEV Form + 'If DEV.Enabled And Not Cfg.DeclMode Then + ' Me.TabControl1.TabPages.Insert(Me.TabControl1.TabPages.Count, DEVpage) + 'End If + + 'VECTO Init + Declaration.Init() + + 'Command Line Args + If Command() <> "" Then + CmdLineCtrl(My.Application.CommandLineArgs) + Else + If Cfg.FirstRun Then + Cfg.FirstRun = False + fwelcome = New F_Welcome + fwelcome.ShowDialog() + End If + End If + End Sub + + 'Open file + Private Sub CmdLineCtrl(ByVal ComLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) + Dim bBATCH As Boolean + Dim bRUN As Boolean + Dim x As Object + Dim str As String + Dim ComFile As String = "" + Dim vecFiles As New List(Of String) + Dim driFiles As New List(Of String) + + bBATCH = False + bRUN = False + ComFile = sKey.NoFile + + 'Read Command-Line Args + For Each x In ComLineArgs + str = Trim(Replace(x.ToString, ChrW(34), "")) + Select Case UCase(str) + Case "-BATCH" + bBATCH = True + Case "-CLOSE" + ComLineShutDown = True + Case "-RUN" + bRUN = True + Case Else + Select Case UCase(fEXT(str)) + Case ".VECTO" + vecFiles.Add(fFileRepl(str)) + Case ".VDRI" + driFiles.Add(fFileRepl(str)) + Case Else + ComFile = fFileRepl(str) + End Select + End Select + Next - 'Resize columns ... after Loading the @file-lists - Me.LvGEN.Columns(1).Width = -2 - Me.LvDRI.Columns(1).Width = -2 - Me.LvMsg.Columns(2).Width = -2 - - 'Initialize BackgroundWorker - VECTOworker = Me.BackgroundWorker1 - VECTOworker.WorkerReportsProgress = True - VECTOworker.WorkerSupportsCancellation = True - - VECTOworkerV3 = New BackgroundWorker() - AddHandler VECTOworkerV3.DoWork, AddressOf VectoWorkerV3_OnDoWork - AddHandler VECTOworkerV3.ProgressChanged, AddressOf VectoWorkerV3_OnProgressChanged - AddHandler VECTOworkerV3.RunWorkerCompleted, AddressOf VectoWorkerV3_OnRunWorkerCompleted - - VECTOworkerV3.WorkerReportsProgress = True - VECTOworkerV3.WorkerSupportsCancellation = True - - - 'Set mode (Batch/Standard) - ModeUpdate() - - 'License check - If False And Not Lic.LICcheck() Then - MsgBox("License File invalid!" & vbCrLf & vbCrLf & Lic.FailMsg) - If Lic.CreateActFile(MyAppPath & "ActivationCode.dat") Then - MsgBox("Activation File created.") - Else - MsgBox("Failed to create Activation File! Is Directory Read-Only?") - End If - Me.Close() - Else - GUImsg(tMsgID.Normal, "License File validated.") - If Lic.TimeWarn Then GUImsg(tMsgID.Warn, "License expiring date (y/m/d): " & Lic.ExpTime) - End If - - DEV.Enabled = True ' Lic.LicFeature(9) - - If DEV.Enabled Then - DEV.LoadFromFile() - LoadDEVconfigs() - End If - - DeclOnOff() - End Sub - - 'Declaration mode GUI settings - Private Sub DeclOnOff() - - If Cfg.DeclMode Then - Me.Text = "VECTO " & VECTOvers & " / VectoCore " & COREvers & " - Declaration Mode" - Me.CbBatch.Checked = False - Cfg.DeclInit() - Else - Me.Text = "VECTO " & VECTOvers & " / VectoCore " & COREvers - End If - - If Cfg.DeclMode Then - LastModeName = "Declaration" - Else - If Cfg.BatchMode Then - LastModeName = "Batch" - Else - LastModeName = "Engineering" - End If - End If - - If DEV.Enabled Then - If Not Cfg.DeclMode Then - If Not Me.TabControl1.TabPages.Contains(DEVpage) Then _ - Me.TabControl1.TabPages.Insert(Me.TabControl1.TabPages.Count, DEVpage) - LoadDEVconfigs() - Else - If Me.TabControl1.TabPages.Contains(DEVpage) Then Me.TabControl1.Controls.Remove(DEVpage) - DEV.SetDefault() - End If - End If - - Status(LastModeName & " Mode") - - Me.LoadOptions() - - Me.LbDecl.Visible = Cfg.DeclMode - - Me.PnDeclOpt.Enabled = Not Cfg.DeclMode - End Sub - - 'Shown Event (Form-Load finished) ... here StartUp Forms are loaded (DEV, GEN/ADV- Editor ..) - Private Sub F01_MAINForm_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown - Dim fwelcome As F_Welcome - - 'DEV Form - 'If DEV.Enabled And Not Cfg.DeclMode Then - ' Me.TabControl1.TabPages.Insert(Me.TabControl1.TabPages.Count, DEVpage) - 'End If - - 'VECTO Init - Declaration.Init() - - 'Command Line Args - If Command() <> "" Then - CmdLineCtrl(My.Application.CommandLineArgs) - Else - If Cfg.FirstRun Then - Cfg.FirstRun = False - fwelcome = New F_Welcome - fwelcome.ShowDialog() - End If - End If - End Sub - - 'Open file - Private Sub CmdLineCtrl(ByVal ComLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String)) - Dim bBATCH As Boolean - Dim bRUN As Boolean - Dim x As Object - Dim str As String - Dim ComFile As String = "" - Dim vecFiles As New List(Of String) - Dim driFiles As New List(Of String) - - bBATCH = False - bRUN = False - ComFile = sKey.NoFile - - 'Read Command-Line Args - For Each x In ComLineArgs - str = Trim(Replace(x.ToString, ChrW(34), "")) - Select Case UCase(str) - Case "-BATCH" - bBATCH = True - Case "-CLOSE" - ComLineShutDown = True - Case "-RUN" - bRUN = True - Case Else - Select Case UCase(fEXT(str)) - Case ".VECTO" - vecFiles.Add(fFileRepl(str)) - Case ".VDRI" - driFiles.Add(fFileRepl(str)) - Case Else - ComFile = fFileRepl(str) - End Select - End Select - Next - - 'Mode switch and load Driving Cycles - If bBATCH Then - Me.CbBatch.Checked = True - - If driFiles.Count > 0 Then - LvDRI.Items.Clear() - AddToCycleListView(driFiles.ToArray) - End If - - Else - Me.CbBatch.Checked = False - End If - - 'Load Vecto files or open editor (if only one file) - If vecFiles.Count > 0 Then - If vecFiles.Count > 1 Or bRUN Then - LvGEN.Items.Clear() - AddToJobListView(vecFiles.ToArray) - Else - ComFile = vecFiles(0) - End If - End If - - 'Run or open file editor if file is specified - If bRUN Then - VECTO_Launcher() - Else - If ComFile <> sKey.NoFile Then OpenVectoFile(ComFile) - End If - End Sub - - 'Close - Private Sub F01_MAINForm_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) _ - Handles Me.FormClosing - - 'Save File-Lists - SaveFileLists() - - 'Close log - LogFile.CloseLog() - - 'Config save - SetOptions() - Cfg.ConfigSAVE() - If DEV.Enabled Then DEV.SaveToFile() - - 'File browser instances close - FB_Close() - End Sub + 'Mode switch and load Driving Cycles + If bBATCH Then + Me.CbBatch.Checked = True + + If driFiles.Count > 0 Then + LvDRI.Items.Clear() + AddToCycleListView(driFiles.ToArray) + End If + + Else + Me.CbBatch.Checked = False + End If + + 'Load Vecto files or open editor (if only one file) + If vecFiles.Count > 0 Then + If vecFiles.Count > 1 Or bRUN Then + LvGEN.Items.Clear() + AddToJobListView(vecFiles.ToArray) + Else + ComFile = vecFiles(0) + End If + End If + + 'Run or open file editor if file is specified + If bRUN Then + VECTO_Launcher() + Else + If ComFile <> sKey.NoFile Then OpenVectoFile(ComFile) + End If + End Sub + + 'Close + Private Sub F01_MAINForm_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) _ + Handles Me.FormClosing + + 'Save File-Lists + SaveFileLists() + + 'Close log + LogFile.CloseLog() + + 'Config save + SetOptions() + Cfg.ConfigSAVE() + If DEV.Enabled Then DEV.SaveToFile() + + 'File browser instances close + FB_Close() + End Sub #End Region - 'Open file - Job, vehicle, engine, gearbox or signature file - Public Sub OpenVectoFile(ByVal File As String) - - If Not IO.File.Exists(File) Then - - GUImsg(tMsgID.Err, "File not found! (" & File & ")") - MsgBox("File not found! (" & File & ")", MsgBoxStyle.Critical) - - Else - - Select Case UCase(fEXT(File)) - Case ".VGBX" - If Not F_GBX.Visible Then - F_GBX.Show() - Else - F_GBX.JobDir = "" - If F_GBX.WindowState = FormWindowState.Minimized Then F_GBX.WindowState = FormWindowState.Normal - F_GBX.BringToFront() - End If - F_GBX.openGBX(File) - Case ".VVEH" - If Not F_VEH.Visible Then - F_VEH.Show() - Else - F_VEH.JobDir = "" - If F_VEH.WindowState = FormWindowState.Minimized Then F_VEH.WindowState = FormWindowState.Normal - F_VEH.BringToFront() - End If - F_VEH.openVEH(File) - Case ".VENG" - If Not F_ENG.Visible Then - F_ENG.Show() - Else - F_ENG.JobDir = "" - If F_ENG.WindowState = FormWindowState.Minimized Then F_ENG.WindowState = FormWindowState.Normal - F_ENG.BringToFront() - End If - F_ENG.openENG(File) - Case ".VECTO" - OpenVECTOeditor(File) - Case ".VSIG" - OpenSigFile(File) - Case Else - MsgBox("Type '" & fEXT(File) & "' unknown!", MsgBoxStyle.Critical) - End Select - - End If - End Sub + 'Open file - Job, vehicle, engine, gearbox or signature file + Public Sub OpenVectoFile(ByVal File As String) + + If Not IO.File.Exists(File) Then + + GUImsg(tMsgID.Err, "File not found! (" & File & ")") + MsgBox("File not found! (" & File & ")", MsgBoxStyle.Critical) + + Else + + Select Case UCase(fEXT(File)) + Case ".VGBX" + If Not F_GBX.Visible Then + F_GBX.Show() + Else + F_GBX.JobDir = "" + If F_GBX.WindowState = FormWindowState.Minimized Then F_GBX.WindowState = FormWindowState.Normal + F_GBX.BringToFront() + End If + F_GBX.openGBX(File) + Case ".VVEH" + If Not F_VEH.Visible Then + F_VEH.Show() + Else + F_VEH.JobDir = "" + If F_VEH.WindowState = FormWindowState.Minimized Then F_VEH.WindowState = FormWindowState.Normal + F_VEH.BringToFront() + End If + F_VEH.openVEH(File) + Case ".VENG" + If Not F_ENG.Visible Then + F_ENG.Show() + Else + F_ENG.JobDir = "" + If F_ENG.WindowState = FormWindowState.Minimized Then F_ENG.WindowState = FormWindowState.Normal + F_ENG.BringToFront() + End If + F_ENG.openENG(File) + Case ".VECTO" + OpenVECTOeditor(File) + Case ".VSIG" + OpenSigFile(File) + Case Else + MsgBox("Type '" & fEXT(File) & "' unknown!", MsgBoxStyle.Critical) + End Select + + End If + End Sub #Region "Job file list" #Region "Events" - Private Sub ButtonGENremove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles ButtonGENremove.Click - RemoveJobFile() - End Sub - - Private Sub ButtonGENadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles ButtonGENadd.Click - AddJobFile() - End Sub - - Private Sub ButtonGENoptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles ButtonGENopt.Click - ConMenTarget = Me.LvGEN - ConMenTarJob = True - - 'Locked functions show/hide - Me.LoadListToolStripMenuItem.Enabled = Not GUIlocked - Me.LoadDefaultListToolStripMenuItem.Enabled = Not GUIlocked - Me.ClearListToolStripMenuItem.Enabled = Not GUIlocked - - Me.ConMenFilelist.Show(Control.MousePosition) - End Sub - - Private Sub ListViewGEN_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _ - Handles LvGEN.KeyDown - Select Case e.KeyCode - Case Keys.Delete, Keys.Back - If Not GUIlocked Then RemoveJobFile() - Case Keys.Enter - OpenJobFile() - End Select - End Sub - - Private Sub ListViewGEN_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles LvGEN.DoubleClick - If Me.LvGEN.SelectedItems.Count > 0 Then - Me.LvGEN.SelectedItems(0).Checked = Not Me.LvGEN.SelectedItems(0).Checked - OpenJobFile() - End If - End Sub - - Private Sub LvGEN_ItemChecked(sender As Object, e As System.Windows.Forms.ItemCheckedEventArgs) _ - Handles LvGEN.ItemChecked - - If e.Item.Checked Then - GENchecked += 1 - Else - GENchecked -= 1 - End If - - If CheckLock Then Exit Sub - UpdateJobTabText() - End Sub - - Private Sub ChBoxAllGEN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles ChBoxAllGEN.CheckedChanged - - If GENcheckAllLock And Me.ChBoxAllGEN.CheckState = CheckState.Indeterminate Then Exit Sub - - CheckAllGEN(Me.ChBoxAllGEN.Checked) - End Sub - - Private Sub CheckAllGEN(ByVal Check As Boolean) - Dim x As ListViewItem - - CheckLock = True - Me.LvGEN.BeginUpdate() - - For Each x In Me.LvGEN.Items - x.Checked = Check - Next - - Me.LvGEN.EndUpdate() - CheckLock = False - - GENchecked = Me.LvGEN.CheckedItems.Count - UpdateJobTabText() - End Sub - - Private Sub ListGEN_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) _ - Handles LvGEN.DragEnter - If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then - e.Effect = DragDropEffects.Copy - End If - End Sub - - Private Sub ListGEN_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) _ - Handles LvGEN.DragDrop - Dim f As String() - f = CType(e.Data.GetData(DataFormats.FileDrop), Array) - AddToJobListView(f) - End Sub - - Private Sub BtGENup_Click(sender As System.Object, e As System.EventArgs) Handles BtGENup.Click - MoveItem(LvGEN, True) - End Sub - - Private Sub BtGENdown_Click(sender As System.Object, e As System.EventArgs) Handles BtGENdown.Click - MoveItem(LvGEN, False) - End Sub + Private Sub ButtonGENremove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles ButtonGENremove.Click + RemoveJobFile() + End Sub + + Private Sub ButtonGENadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles ButtonGENadd.Click + AddJobFile() + End Sub + + Private Sub ButtonGENoptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles ButtonGENopt.Click + ConMenTarget = Me.LvGEN + ConMenTarJob = True + + 'Locked functions show/hide + Me.LoadListToolStripMenuItem.Enabled = Not GUIlocked + Me.LoadDefaultListToolStripMenuItem.Enabled = Not GUIlocked + Me.ClearListToolStripMenuItem.Enabled = Not GUIlocked + + Me.ConMenFilelist.Show(Control.MousePosition) + End Sub + + Private Sub ListViewGEN_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _ + Handles LvGEN.KeyDown + Select Case e.KeyCode + Case Keys.Delete, Keys.Back + If Not GUIlocked Then RemoveJobFile() + Case Keys.Enter + OpenJobFile() + End Select + End Sub + + Private Sub ListViewGEN_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles LvGEN.DoubleClick + If Me.LvGEN.SelectedItems.Count > 0 Then + Me.LvGEN.SelectedItems(0).Checked = Not Me.LvGEN.SelectedItems(0).Checked + OpenJobFile() + End If + End Sub + + Private Sub LvGEN_ItemChecked(sender As Object, e As System.Windows.Forms.ItemCheckedEventArgs) _ + Handles LvGEN.ItemChecked + + If e.Item.Checked Then + GENchecked += 1 + Else + GENchecked -= 1 + End If + + If CheckLock Then Exit Sub + UpdateJobTabText() + End Sub + + Private Sub ChBoxAllGEN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles ChBoxAllGEN.CheckedChanged + + If GENcheckAllLock And Me.ChBoxAllGEN.CheckState = CheckState.Indeterminate Then Exit Sub + + CheckAllGEN(Me.ChBoxAllGEN.Checked) + End Sub + + Private Sub CheckAllGEN(ByVal Check As Boolean) + Dim x As ListViewItem + + CheckLock = True + Me.LvGEN.BeginUpdate() + + For Each x In Me.LvGEN.Items + x.Checked = Check + Next + + Me.LvGEN.EndUpdate() + CheckLock = False + + GENchecked = Me.LvGEN.CheckedItems.Count + UpdateJobTabText() + End Sub + + Private Sub ListGEN_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) _ + Handles LvGEN.DragEnter + If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then + e.Effect = DragDropEffects.Copy + End If + End Sub + + Private Sub ListGEN_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) _ + Handles LvGEN.DragDrop + Dim f As String() + f = CType(e.Data.GetData(DataFormats.FileDrop), Array) + AddToJobListView(f) + End Sub + + Private Sub BtGENup_Click(sender As System.Object, e As System.EventArgs) Handles BtGENup.Click + MoveItem(LvGEN, True) + End Sub + + Private Sub BtGENdown_Click(sender As System.Object, e As System.EventArgs) Handles BtGENdown.Click + MoveItem(LvGEN, False) + End Sub #End Region - 'Remove selected file(s) from job list - Private Sub RemoveJobFile() - Dim lastindx As Integer - Dim SelIx() As Integer - Dim i As Integer - - If Me.LvGEN.SelectedItems.Count < 1 Then - If Me.LvGEN.Items.Count = 1 Then - Me.LvGEN.Items(0).Selected = True - Else - Exit Sub - End If - End If - - LvGEN.BeginUpdate() - CheckLock = True - - ReDim SelIx(LvGEN.SelectedItems.Count - 1) - LvGEN.SelectedIndices.CopyTo(SelIx, 0) - - lastindx = LvGEN.SelectedIndices(LvGEN.SelectedItems.Count - 1) - - For i = UBound(SelIx) To 0 Step -1 - LvGEN.Items.RemoveAt(SelIx(i)) - Next - - If lastindx < LvGEN.Items.Count Then - LvGEN.Items(lastindx).Selected = True - Else - If LvGEN.Items.Count > 0 Then LvGEN.Items(LvGEN.Items.Count - 1).Selected = True - End If - - LvGEN.EndUpdate() - CheckLock = False - - GENchecked = LvGEN.CheckedItems.Count - UpdateJobTabText() - End Sub - - 'Browse for job file(s) and add to job list with AddToJobListView - Private Sub AddJobFile() - Dim x As String() - Dim Chck As Boolean = False - - x = New String() {""} - - 'STANDARD/BATCH - If fbVECTO.OpenDialog("", True, "vecto") Then - Chck = True - x = fbVECTO.Files - End If - - If Chck Then AddToJobListView(x) - End Sub - - 'Open file in list - Private Sub OpenJobFile() - Dim f As String - - If Me.LvGEN.SelectedItems.Count < 1 Then - If Me.LvGEN.Items.Count = 1 Then - Me.LvGEN.Items(0).Selected = True - Else - Exit Sub - End If - End If - - f = Me.LvGEN.SelectedItems(0).SubItems(0).Text - f = fFileRepl(f) - If Not IO.File.Exists(f) Then - MsgBox(f & " not found!") - Else - OpenVECTOeditor(f) - End If - End Sub - - 'Add File to job listview (multiple files) - Private Sub AddToJobListView(ByVal Path As String(), Optional ByVal Txt As String = " ") - Dim pDim As Int16 - Dim p As Int16 - Dim f As Int16 - Dim fList As String() - Dim fListDim As Int16 = -1 - Dim ListViewItem0 As ListViewItem - - 'If VECTO runs: Cancel operation (because Mode-change during calculation is not very clever) - If VECTOworker.IsBusy Then Exit Sub - - pDim = UBound(Path) - ReDim fList(0) 'um Nullverweisausnahme-Warnung zu verhindern - - '******************************************* Begin Update '******************************************* - Me.LvGEN.BeginUpdate() - CheckLock = True - - Me.LvGEN.SelectedIndices.Clear() - - If pDim = 0 Then - fListDim = Me.LvGEN.Items.Count - 1 - ReDim fList(fListDim) - For f = 0 To fListDim - fList(f) = fFileRepl(Me.LvGEN.Items(f).SubItems(0).Text) - Next - End If - - For p = 0 To pDim - - If pDim = 0 Then - - For f = 0 To fListDim - - 'If file already exists in the list: Do not append (only when a single file) - If UCase(Path(p)) = UCase(fList(f)) Then - - 'Status reset - Me.LvGEN.Items(f).SubItems(1).Text = Txt - Me.LvGEN.Items(f).BackColor = Color.FromKnownColor(KnownColor.Window) - Me.LvGEN.Items(f).ForeColor = Color.FromKnownColor(KnownColor.WindowText) - - 'Element auswählen und anhaken |@@| Element selection and hook - Me.LvGEN.Items(f).Selected = True - Me.LvGEN.Items(f).Checked = True - Me.LvGEN.Items(f).EnsureVisible() - - GoTo lbFound - End If - Next - - End If - - 'Otherwise: Add File (without WorkDir) - ListViewItem0 = New ListViewItem(Path(p)) 'fFileWD(Path(p))) - ListViewItem0.SubItems.Add(" ") - ListViewItem0.Checked = True - ListViewItem0.Selected = True - Me.LvGEN.Items.Add(ListViewItem0) - ListViewItem0.EnsureVisible() + 'Remove selected file(s) from job list + Private Sub RemoveJobFile() + Dim lastindx As Integer + Dim SelIx() As Integer + Dim i As Integer + + If Me.LvGEN.SelectedItems.Count < 1 Then + If Me.LvGEN.Items.Count = 1 Then + Me.LvGEN.Items(0).Selected = True + Else + Exit Sub + End If + End If + + LvGEN.BeginUpdate() + CheckLock = True + + ReDim SelIx(LvGEN.SelectedItems.Count - 1) + LvGEN.SelectedIndices.CopyTo(SelIx, 0) + + lastindx = LvGEN.SelectedIndices(LvGEN.SelectedItems.Count - 1) + + For i = UBound(SelIx) To 0 Step -1 + LvGEN.Items.RemoveAt(SelIx(i)) + Next + + If lastindx < LvGEN.Items.Count Then + LvGEN.Items(lastindx).Selected = True + Else + If LvGEN.Items.Count > 0 Then LvGEN.Items(LvGEN.Items.Count - 1).Selected = True + End If + + LvGEN.EndUpdate() + CheckLock = False + + GENchecked = LvGEN.CheckedItems.Count + UpdateJobTabText() + End Sub + + 'Browse for job file(s) and add to job list with AddToJobListView + Private Sub AddJobFile() + Dim x As String() + Dim Chck As Boolean = False + + x = New String() {""} + + 'STANDARD/BATCH + If fbVECTO.OpenDialog("", True, "vecto") Then + Chck = True + x = fbVECTO.Files + End If + + If Chck Then AddToJobListView(x) + End Sub + + 'Open file in list + Private Sub OpenJobFile() + Dim f As String + + If Me.LvGEN.SelectedItems.Count < 1 Then + If Me.LvGEN.Items.Count = 1 Then + Me.LvGEN.Items(0).Selected = True + Else + Exit Sub + End If + End If + + f = Me.LvGEN.SelectedItems(0).SubItems(0).Text + f = fFileRepl(f) + If Not IO.File.Exists(f) Then + MsgBox(f & " not found!") + Else + OpenVECTOeditor(f) + End If + End Sub + + 'Add File to job listview (multiple files) + Private Sub AddToJobListView(ByVal Path As String(), Optional ByVal Txt As String = " ") + Dim pDim As Int16 + Dim p As Int16 + Dim f As Int16 + Dim fList As String() + Dim fListDim As Int16 = -1 + Dim ListViewItem0 As ListViewItem + + 'If VECTO runs: Cancel operation (because Mode-change during calculation is not very clever) + If VECTOworker.IsBusy Then Exit Sub + + pDim = UBound(Path) + ReDim fList(0) 'um Nullverweisausnahme-Warnung zu verhindern + + '******************************************* Begin Update '******************************************* + Me.LvGEN.BeginUpdate() + CheckLock = True + + Me.LvGEN.SelectedIndices.Clear() + + If pDim = 0 Then + fListDim = Me.LvGEN.Items.Count - 1 + ReDim fList(fListDim) + For f = 0 To fListDim + fList(f) = fFileRepl(Me.LvGEN.Items(f).SubItems(0).Text) + Next + End If + + For p = 0 To pDim + + If pDim = 0 Then + + For f = 0 To fListDim + + 'If file already exists in the list: Do not append (only when a single file) + If UCase(Path(p)) = UCase(fList(f)) Then + + 'Status reset + Me.LvGEN.Items(f).SubItems(1).Text = Txt + Me.LvGEN.Items(f).BackColor = Color.FromKnownColor(KnownColor.Window) + Me.LvGEN.Items(f).ForeColor = Color.FromKnownColor(KnownColor.WindowText) + + 'Element auswählen und anhaken |@@| Element selection and hook + Me.LvGEN.Items(f).Selected = True + Me.LvGEN.Items(f).Checked = True + Me.LvGEN.Items(f).EnsureVisible() + + GoTo lbFound + End If + Next + + End If + + 'Otherwise: Add File (without WorkDir) + ListViewItem0 = New ListViewItem(Path(p)) 'fFileWD(Path(p))) + ListViewItem0.SubItems.Add(" ") + ListViewItem0.Checked = True + ListViewItem0.Selected = True + Me.LvGEN.Items.Add(ListViewItem0) + ListViewItem0.EnsureVisible() lbFound: - Next + Next - Me.LvGEN.EndUpdate() - CheckLock = False - '******************************************* End Update '******************************************* + Me.LvGEN.EndUpdate() + CheckLock = False + '******************************************* End Update '******************************************* - 'Number update - GENchecked = Me.LvGEN.CheckedItems.Count - UpdateJobTabText() - End Sub + 'Number update + GENchecked = Me.LvGEN.CheckedItems.Count + UpdateJobTabText() + End Sub - 'Add File to job listview (single file) - Public Sub AddToJobListView(ByVal Path As String, Optional ByVal Txt As String = " ") - Dim p(0) As String - p(0) = Path - AddToJobListView(p, Txt) - End Sub + 'Add File to job listview (single file) + Public Sub AddToJobListView(ByVal Path As String, Optional ByVal Txt As String = " ") + Dim p(0) As String + p(0) = Path + AddToJobListView(p, Txt) + End Sub - 'Update job files counter in tab titel - Private Sub UpdateJobTabText() - Dim c As Integer - c = Me.LvGEN.Items.Count + 'Update job files counter in tab titel + Private Sub UpdateJobTabText() + Dim c As Integer + c = Me.LvGEN.Items.Count - Me.TabPageGEN.Text = "Job Files ( " & GENchecked & " / " & c & " )" - 'Me.TabPageGEN.Text = "Job Files (" & c & ")" + Me.TabPageGEN.Text = "Job Files ( " & GENchecked & " / " & c & " )" + 'Me.TabPageGEN.Text = "Job Files (" & c & ")" - GENcheckAllLock = True + GENcheckAllLock = True - If GENchecked = 0 Then - Me.ChBoxAllGEN.CheckState = CheckState.Unchecked - ElseIf GENchecked = c Then - Me.ChBoxAllGEN.CheckState = CheckState.Checked - Else - Me.ChBoxAllGEN.CheckState = CheckState.Indeterminate - End If + If GENchecked = 0 Then + Me.ChBoxAllGEN.CheckState = CheckState.Unchecked + ElseIf GENchecked = c Then + Me.ChBoxAllGEN.CheckState = CheckState.Checked + Else + Me.ChBoxAllGEN.CheckState = CheckState.Indeterminate + End If - GENcheckAllLock = False - End Sub + GENcheckAllLock = False + End Sub #End Region @@ -1030,1045 +1078,1019 @@ lbFound: #Region "Events" - Private Sub ButtonDRIadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles ButtonDRIadd.Click - AddCycle() - End Sub - - Private Sub ButtonDRIremove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles ButtonDRIremove.Click - RemoveCycle() - End Sub - - Private Sub ButtonDRIoptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles ButtonDRIedit.Click - ConMenTarget = Me.LvDRI - ConMenTarJob = False - Me.ConMenFilelist.Show(Control.MousePosition) - End Sub - - Private Sub LvDRI_ItemChecked(sender As Object, e As System.Windows.Forms.ItemCheckedEventArgs) _ - Handles LvDRI.ItemChecked - - If e.Item.Checked Then - DRIchecked += 1 - Else - DRIchecked -= 1 - End If - - If CheckLock Then Exit Sub - UpdateCycleTabText() - End Sub - - Private Sub ChBoxAllDRI_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles ChBoxAllDRI.CheckedChanged - Dim Check As Boolean - Dim x As ListViewItem - - If DRIcheckAllLock Or Me.ChBoxAllDRI.CheckState = CheckState.Indeterminate Then Exit Sub - - Check = Me.ChBoxAllDRI.Checked - - CheckLock = True - Me.LvDRI.BeginUpdate() - - For Each x In Me.LvDRI.Items - x.Checked = Check - Next - - Me.LvDRI.EndUpdate() - CheckLock = False - - DRIchecked = Me.LvDRI.CheckedItems.Count - UpdateCycleTabText() - End Sub - - Private Sub ListViewDRI_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles LvDRI.DoubleClick - If Me.LvDRI.SelectedItems.Count > 0 Then - Me.LvDRI.SelectedItems(0).Checked = Not Me.LvDRI.SelectedItems(0).Checked - OpenCycle() - Else - AddCycle() - End If - End Sub - - Private Sub ListViewDRI_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _ - Handles LvDRI.KeyDown - Select Case e.KeyCode - Case Keys.Delete, Keys.Back - If Not GUIlocked Then RemoveCycle() - Case Keys.Enter - OpenCycle() - End Select - End Sub - - 'Drag n' Drop - Private Sub ListDRI_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) _ - Handles LvDRI.DragEnter - If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then e.Effect = DragDropEffects.Copy - End Sub - - Private Sub ListDRI_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) _ - Handles LvDRI.DragDrop - Dim f As String() - f = CType(e.Data.GetData(DataFormats.FileDrop), Array) - AddToCycleListView(f) - If LvDRI.Items.Count > 0 Then LvDRI.Items(LvDRI.Items.Count - 1).Selected = True - End Sub - - Private Sub BtDRIup_Click(sender As System.Object, e As System.EventArgs) Handles BtDRIup.Click - MoveItem(LvDRI, True) - End Sub - - Private Sub BtDRIdown_Click(sender As System.Object, e As System.EventArgs) Handles BtDRIdown.Click - MoveItem(LvDRI, False) - End Sub + Private Sub ButtonDRIadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles ButtonDRIadd.Click + AddCycle() + End Sub + + Private Sub ButtonDRIremove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles ButtonDRIremove.Click + RemoveCycle() + End Sub + + Private Sub ButtonDRIoptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles ButtonDRIedit.Click + ConMenTarget = Me.LvDRI + ConMenTarJob = False + Me.ConMenFilelist.Show(Control.MousePosition) + End Sub + + Private Sub LvDRI_ItemChecked(sender As Object, e As System.Windows.Forms.ItemCheckedEventArgs) _ + Handles LvDRI.ItemChecked + + If e.Item.Checked Then + DRIchecked += 1 + Else + DRIchecked -= 1 + End If + + If CheckLock Then Exit Sub + UpdateCycleTabText() + End Sub + + Private Sub ChBoxAllDRI_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles ChBoxAllDRI.CheckedChanged + Dim Check As Boolean + Dim x As ListViewItem + + If DRIcheckAllLock Or Me.ChBoxAllDRI.CheckState = CheckState.Indeterminate Then Exit Sub + + Check = Me.ChBoxAllDRI.Checked + + CheckLock = True + Me.LvDRI.BeginUpdate() + + For Each x In Me.LvDRI.Items + x.Checked = Check + Next + + Me.LvDRI.EndUpdate() + CheckLock = False + + DRIchecked = Me.LvDRI.CheckedItems.Count + UpdateCycleTabText() + End Sub + + Private Sub ListViewDRI_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles LvDRI.DoubleClick + If Me.LvDRI.SelectedItems.Count > 0 Then + Me.LvDRI.SelectedItems(0).Checked = Not Me.LvDRI.SelectedItems(0).Checked + OpenCycle() + Else + AddCycle() + End If + End Sub + + Private Sub ListViewDRI_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _ + Handles LvDRI.KeyDown + Select Case e.KeyCode + Case Keys.Delete, Keys.Back + If Not GUIlocked Then RemoveCycle() + Case Keys.Enter + OpenCycle() + End Select + End Sub + + 'Drag n' Drop + Private Sub ListDRI_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) _ + Handles LvDRI.DragEnter + If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then e.Effect = DragDropEffects.Copy + End Sub + + Private Sub ListDRI_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) _ + Handles LvDRI.DragDrop + Dim f As String() + f = CType(e.Data.GetData(DataFormats.FileDrop), Array) + AddToCycleListView(f) + If LvDRI.Items.Count > 0 Then LvDRI.Items(LvDRI.Items.Count - 1).Selected = True + End Sub + + Private Sub BtDRIup_Click(sender As System.Object, e As System.EventArgs) Handles BtDRIup.Click + MoveItem(LvDRI, True) + End Sub + + Private Sub BtDRIdown_Click(sender As System.Object, e As System.EventArgs) Handles BtDRIdown.Click + MoveItem(LvDRI, False) + End Sub #End Region - 'Remove selected file(s) from cycle list - Private Sub RemoveCycle() - Dim lastindx As Integer - Dim SelIx() As Integer - Dim i As Integer - - If Me.LvDRI.SelectedItems.Count < 1 Then - If Me.LvDRI.Items.Count = 1 Then - Me.LvDRI.Items(0).Selected = True - Else - Exit Sub - End If - End If - - CheckLock = True - LvDRI.BeginUpdate() - - ReDim SelIx(LvDRI.SelectedItems.Count - 1) - LvDRI.SelectedIndices.CopyTo(SelIx, 0) - - lastindx = LvDRI.SelectedIndices(LvDRI.SelectedItems.Count - 1) - - For i = UBound(SelIx) To 0 Step -1 - LvDRI.Items.RemoveAt(SelIx(i)) - Next - - If lastindx < LvDRI.Items.Count Then - LvDRI.Items(lastindx).Selected = True - Else - If LvDRI.Items.Count > 0 Then LvDRI.Items(LvDRI.Items.Count - 1).Selected = True - End If - - CheckLock = False - LvDRI.EndUpdate() - - DRIchecked = LvDRI.CheckedItems.Count - UpdateCycleTabText() - End Sub - - 'Browse for cycle file(s) and add to cycle list with AddToCycleListView - Private Sub AddCycle() - If fbDRI.OpenDialog("", True) Then - AddToCycleListView(fbDRI.Files) - If LvDRI.Items.Count > 0 Then LvDRI.Items(LvDRI.Items.Count - 1).Selected = True - End If - End Sub - - 'Open cycle in list - Private Sub OpenCycle() - - If Me.LvDRI.SelectedItems.Count < 1 Then - If Me.LvDRI.Items.Count = 1 Then - Me.LvDRI.Items(0).Selected = True - Else - Exit Sub - End If - End If - - OpenFiles(fFileRepl(Me.LvDRI.SelectedItems(0).SubItems(0).Text)) - End Sub - - 'Add File to cycle listview (multiple files) - Private Sub AddToCycleListView(ByVal Path As String()) - Dim pDim As Int16 - Dim p As Int16 - Dim ListViewItem0 As ListViewItem - - pDim = UBound(Path) - - Me.LvDRI.BeginUpdate() - CheckLock = True - - 'Mode switch if necessary - If Not Me.CbBatch.Checked Then Me.CbBatch.Checked = True - - For p = 0 To pDim - ListViewItem0 = New ListViewItem(Path(p)) 'fFileWD(Path(p))) - ListViewItem0.SubItems.Add(" ") - ListViewItem0.Checked = True - Me.LvDRI.Items.Add(ListViewItem0) + 'Remove selected file(s) from cycle list + Private Sub RemoveCycle() + Dim lastindx As Integer + Dim SelIx() As Integer + Dim i As Integer + + If Me.LvDRI.SelectedItems.Count < 1 Then + If Me.LvDRI.Items.Count = 1 Then + Me.LvDRI.Items(0).Selected = True + Else + Exit Sub + End If + End If + + CheckLock = True + LvDRI.BeginUpdate() + + ReDim SelIx(LvDRI.SelectedItems.Count - 1) + LvDRI.SelectedIndices.CopyTo(SelIx, 0) + + lastindx = LvDRI.SelectedIndices(LvDRI.SelectedItems.Count - 1) + + For i = UBound(SelIx) To 0 Step -1 + LvDRI.Items.RemoveAt(SelIx(i)) + Next + + If lastindx < LvDRI.Items.Count Then + LvDRI.Items(lastindx).Selected = True + Else + If LvDRI.Items.Count > 0 Then LvDRI.Items(LvDRI.Items.Count - 1).Selected = True + End If + + CheckLock = False + LvDRI.EndUpdate() + + DRIchecked = LvDRI.CheckedItems.Count + UpdateCycleTabText() + End Sub + + 'Browse for cycle file(s) and add to cycle list with AddToCycleListView + Private Sub AddCycle() + If fbDRI.OpenDialog("", True) Then + AddToCycleListView(fbDRI.Files) + If LvDRI.Items.Count > 0 Then LvDRI.Items(LvDRI.Items.Count - 1).Selected = True + End If + End Sub + + 'Open cycle in list + Private Sub OpenCycle() + + If Me.LvDRI.SelectedItems.Count < 1 Then + If Me.LvDRI.Items.Count = 1 Then + Me.LvDRI.Items(0).Selected = True + Else + Exit Sub + End If + End If + + OpenFiles(fFileRepl(Me.LvDRI.SelectedItems(0).SubItems(0).Text)) + End Sub + + 'Add File to cycle listview (multiple files) + Private Sub AddToCycleListView(ByVal Path As String()) + Dim pDim As Int16 + Dim p As Int16 + Dim ListViewItem0 As ListViewItem + + pDim = UBound(Path) + + Me.LvDRI.BeginUpdate() + CheckLock = True + + 'Mode switch if necessary + If Not Me.CbBatch.Checked Then Me.CbBatch.Checked = True + + For p = 0 To pDim + ListViewItem0 = New ListViewItem(Path(p)) 'fFileWD(Path(p))) + ListViewItem0.SubItems.Add(" ") + ListViewItem0.Checked = True + Me.LvDRI.Items.Add(ListViewItem0) lbFound: - Next + Next - Me.LvDRI.EndUpdate() - CheckLock = False + Me.LvDRI.EndUpdate() + CheckLock = False - 'Number update - DRIchecked = Me.LvDRI.CheckedItems.Count - UpdateCycleTabText() - End Sub + 'Number update + DRIchecked = Me.LvDRI.CheckedItems.Count + UpdateCycleTabText() + End Sub - 'Add File to cycle listview (single file) - Private Sub AddToCycleListView(ByVal Path As String) - Dim p(0) As String - p(0) = Path - AddToCycleListView(p) - End Sub + 'Add File to cycle listview (single file) + Private Sub AddToCycleListView(ByVal Path As String) + Dim p(0) As String + p(0) = Path + AddToCycleListView(p) + End Sub - 'Update cycle files counter in tab titel - Private Sub UpdateCycleTabText() - Dim c As Integer - c = Me.LvDRI.Items.Count + 'Update cycle files counter in tab titel + Private Sub UpdateCycleTabText() + Dim c As Integer + c = Me.LvDRI.Items.Count - Me.TabPageDRI.Text = "Driving Cycles ( " & DRIchecked & " / " & c & " )" - 'Me.TabPageDRI.Text = "Driving Cycles (" & c & ")" + Me.TabPageDRI.Text = "Driving Cycles ( " & DRIchecked & " / " & c & " )" + 'Me.TabPageDRI.Text = "Driving Cycles (" & c & ")" - DRIcheckAllLock = True + DRIcheckAllLock = True - If DRIchecked = 0 Then - Me.ChBoxAllDRI.CheckState = CheckState.Unchecked - ElseIf DRIchecked = c Then - Me.ChBoxAllDRI.CheckState = CheckState.Checked - Else - Me.ChBoxAllDRI.CheckState = CheckState.Indeterminate - End If + If DRIchecked = 0 Then + Me.ChBoxAllDRI.CheckState = CheckState.Unchecked + ElseIf DRIchecked = c Then + Me.ChBoxAllDRI.CheckState = CheckState.Checked + Else + Me.ChBoxAllDRI.CheckState = CheckState.Indeterminate + End If - DRIcheckAllLock = False - End Sub + DRIcheckAllLock = False + End Sub #End Region #Region "Toolstrip" - 'New Job file - Private Sub ToolStripBtNew_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBtNew.Click - OpenVECTOeditor("<New>") - End Sub - - 'Open input file - Private Sub ToolStripBtOpen_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBtOpen.Click - - If fbVECTO.OpenDialog("", False, "vecto,vveh,vgbx,veng,vsig") Then - OpenVectoFile(fbVECTO.Files(0)) - End If - End Sub - - Private Sub GENEditorToolStripMenuItem1_Click(sender As System.Object, e As System.EventArgs) _ - Handles GENEditorToolStripMenuItem1.Click - OpenVECTOeditor("<New>") - End Sub - - Private Sub VEHEditorToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles VEHEditorToolStripMenuItem.Click - If Not F_VEH.Visible Then - F_VEH.Show() - Else - If F_VEH.WindowState = FormWindowState.Minimized Then F_VEH.WindowState = FormWindowState.Normal - F_VEH.BringToFront() - End If - End Sub - - Private Sub EngineEditorToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles EngineEditorToolStripMenuItem.Click - If Not F_ENG.Visible Then - F_ENG.Show() - Else - If F_ENG.WindowState = FormWindowState.Minimized Then F_ENG.WindowState = FormWindowState.Normal - F_ENG.BringToFront() - End If - End Sub - - Private Sub GearboxEditorToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles GearboxEditorToolStripMenuItem.Click - If Not F_GBX.Visible Then - F_GBX.Show() - Else - If F_GBX.WindowState = FormWindowState.Minimized Then F_GBX.WindowState = FormWindowState.Normal - F_GBX.BringToFront() - End If - End Sub - - Private Sub GraphToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles GraphToolStripMenuItem.Click - Dim FGraph As New F_Graph - FGraph.Show() - End Sub - - Private Sub SignOrVerifyFilesToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles SignOrVerifyFilesToolStripMenuItem.Click - If Not F_FileSign.Visible Then - F_FileSign.Show() - Else - If F_FileSign.WindowState = FormWindowState.Minimized Then F_FileSign.WindowState = FormWindowState.Normal - F_FileSign.BringToFront() - End If - End Sub - - Private Sub OpenLogToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles OpenLogToolStripMenuItem.Click - System.Diagnostics.Process.Start(MyAppPath & "log.txt") - End Sub - - Private Sub SettingsToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles SettingsToolStripMenuItem.Click - F_Settings.ShowDialog() - End Sub - - Private Sub UserManualToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles UserManualToolStripMenuItem.Click - If IO.File.Exists(MyAppPath & "User Manual\usermanual.html") Then - System.Diagnostics.Process.Start(MyAppPath & "User Manual\usermanual.html") - Else - MsgBox("User Manual not found!", MsgBoxStyle.Critical) - End If - End Sub - - Private Sub UpdateNotesToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles UpdateNotesToolStripMenuItem.Click - If IO.File.Exists(MyAppPath & "User Manual\Release Notes.pdf") Then - System.Diagnostics.Process.Start(MyAppPath & "User Manual\Release Notes.pdf") - Else - MsgBox("Release Notes not found!", MsgBoxStyle.Critical) - End If - End Sub - - Private Sub ReportBugViaCITnetToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles ReportBugViaCITnetToolStripMenuItem.Click - F_JIRA.ShowDialog() - End Sub - - Private Sub CreateActivationFileToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles CreateActivationFileToolStripMenuItem.Click - If MsgBox("Create Activation File ?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then - If Lic.CreateActFile(MyAppPath & "ActivationCode.dat") Then - GUImsg(tMsgID.Normal, "Activation File created.") - Else - GUImsg(tMsgID.Err, "Failed to create Activation File!") - MsgBox("ERROR! Failed to create Activation File!", MsgBoxStyle.Critical) - End If - End If - End Sub - - Private Sub AboutVECTOToolStripMenuItem1_Click(sender As System.Object, e As System.EventArgs) _ - Handles AboutVECTOToolStripMenuItem1.Click - F_AboutBox.ShowDialog() - End Sub + 'New Job file + Private Sub ToolStripBtNew_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBtNew.Click + OpenVECTOeditor("<New>") + End Sub + + 'Open input file + Private Sub ToolStripBtOpen_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBtOpen.Click + + If fbVECTO.OpenDialog("", False, "vecto,vveh,vgbx,veng,vsig") Then + OpenVectoFile(fbVECTO.Files(0)) + End If + End Sub + + Private Sub GENEditorToolStripMenuItem1_Click(sender As System.Object, e As System.EventArgs) _ + Handles GENEditorToolStripMenuItem1.Click + OpenVECTOeditor("<New>") + End Sub + + Private Sub VEHEditorToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles VEHEditorToolStripMenuItem.Click + If Not F_VEH.Visible Then + F_VEH.Show() + Else + If F_VEH.WindowState = FormWindowState.Minimized Then F_VEH.WindowState = FormWindowState.Normal + F_VEH.BringToFront() + End If + End Sub + + Private Sub EngineEditorToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles EngineEditorToolStripMenuItem.Click + If Not F_ENG.Visible Then + F_ENG.Show() + Else + If F_ENG.WindowState = FormWindowState.Minimized Then F_ENG.WindowState = FormWindowState.Normal + F_ENG.BringToFront() + End If + End Sub + + Private Sub GearboxEditorToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles GearboxEditorToolStripMenuItem.Click + If Not F_GBX.Visible Then + F_GBX.Show() + Else + If F_GBX.WindowState = FormWindowState.Minimized Then F_GBX.WindowState = FormWindowState.Normal + F_GBX.BringToFront() + End If + End Sub + + Private Sub GraphToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles GraphToolStripMenuItem.Click + Dim FGraph As New F_Graph + FGraph.Show() + End Sub + + Private Sub SignOrVerifyFilesToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles SignOrVerifyFilesToolStripMenuItem.Click + If Not F_FileSign.Visible Then + F_FileSign.Show() + Else + If F_FileSign.WindowState = FormWindowState.Minimized Then F_FileSign.WindowState = FormWindowState.Normal + F_FileSign.BringToFront() + End If + End Sub + + Private Sub OpenLogToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles OpenLogToolStripMenuItem.Click + System.Diagnostics.Process.Start(MyAppPath & "log.txt") + End Sub + + Private Sub SettingsToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles SettingsToolStripMenuItem.Click + F_Settings.ShowDialog() + End Sub + + Private Sub UserManualToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles UserManualToolStripMenuItem.Click + If IO.File.Exists(MyAppPath & "User Manual\usermanual.html") Then + System.Diagnostics.Process.Start(MyAppPath & "User Manual\usermanual.html") + Else + MsgBox("User Manual not found!", MsgBoxStyle.Critical) + End If + End Sub + + Private Sub UpdateNotesToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles UpdateNotesToolStripMenuItem.Click + If IO.File.Exists(MyAppPath & "User Manual\Release Notes.pdf") Then + System.Diagnostics.Process.Start(MyAppPath & "User Manual\Release Notes.pdf") + Else + MsgBox("Release Notes not found!", MsgBoxStyle.Critical) + End If + End Sub + + Private Sub ReportBugViaCITnetToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles ReportBugViaCITnetToolStripMenuItem.Click + F_JIRA.ShowDialog() + End Sub + + Private Sub CreateActivationFileToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles CreateActivationFileToolStripMenuItem.Click + If MsgBox("Create Activation File ?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + If Lic.CreateActFile(MyAppPath & "ActivationCode.dat") Then + GUImsg(tMsgID.Normal, "Activation File created.") + Else + GUImsg(tMsgID.Err, "Failed to create Activation File!") + MsgBox("ERROR! Failed to create Activation File!", MsgBoxStyle.Critical) + End If + End If + End Sub + + Private Sub AboutVECTOToolStripMenuItem1_Click(sender As System.Object, e As System.EventArgs) _ + Handles AboutVECTOToolStripMenuItem1.Click + F_AboutBox.ShowDialog() + End Sub #End Region - 'Move job/cycle file up or down in list view - Private Sub MoveItem(ByRef ListV As ListView, ByVal MoveUp As Boolean) - Dim x As Int32 - Dim y As Int32 - Dim y1 As Int32 - Dim items() As String - Dim check() As Boolean - Dim index() As Integer - Dim ListViewItem0 As ListViewItem - - If GUIlocked Then Exit Sub - - 'Cache Selected Items - y1 = ListV.SelectedItems.Count - 1 - ReDim items(y1) - ReDim check(y1) - ReDim index(y1) - y = 0 - For Each x In ListV.SelectedIndices - items(y) = ListV.Items(x).SubItems(0).Text - check(y) = ListV.Items(x).Checked - If MoveUp Then - If x = 0 Then Exit Sub - index(y) = x - 1 - Else - If x = ListV.Items.Count - 1 Then Exit Sub - index(y) = x + 1 - End If - y += 1 - Next - - ListV.BeginUpdate() - - 'Delete Selected Items - For Each ListViewItem0 In ListV.SelectedItems - ListViewItem0.Remove() - Next - - 'Items select and Insert - 'For y = y1 To 0 Step -1 - For y = 0 To y1 - If Not check(y) Then GENchecked += 1 - ListViewItem0 = ListV.Items.Insert(index(y), items(y)) - ListViewItem0.SubItems.Add(" ") - ListViewItem0.Checked = check(y) - ListV.SelectedIndices.Add(index(y)) - Next - - ListV.EndUpdate() - End Sub + 'Move job/cycle file up or down in list view + Private Sub MoveItem(ByRef ListV As ListView, ByVal MoveUp As Boolean) + Dim x As Int32 + Dim y As Int32 + Dim y1 As Int32 + Dim items() As String + Dim check() As Boolean + Dim index() As Integer + Dim ListViewItem0 As ListViewItem + + If GUIlocked Then Exit Sub + + 'Cache Selected Items + y1 = ListV.SelectedItems.Count - 1 + ReDim items(y1) + ReDim check(y1) + ReDim index(y1) + y = 0 + For Each x In ListV.SelectedIndices + items(y) = ListV.Items(x).SubItems(0).Text + check(y) = ListV.Items(x).Checked + If MoveUp Then + If x = 0 Then Exit Sub + index(y) = x - 1 + Else + If x = ListV.Items.Count - 1 Then Exit Sub + index(y) = x + 1 + End If + y += 1 + Next + + ListV.BeginUpdate() + + 'Delete Selected Items + For Each ListViewItem0 In ListV.SelectedItems + ListViewItem0.Remove() + Next + + 'Items select and Insert + 'For y = y1 To 0 Step -1 + For y = 0 To y1 + If Not check(y) Then GENchecked += 1 + ListViewItem0 = ListV.Items.Insert(index(y), items(y)) + ListViewItem0.SubItems.Add(" ") + ListViewItem0.Checked = check(y) + ListV.SelectedIndices.Add(index(y)) + Next + + ListV.EndUpdate() + End Sub #Region "job/cycle file List - Context Menu" - 'Save List - Private Sub SaveListToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles SaveListToolStripMenuItem.Click - If fbFileLists.SaveDialog("") Then - If ConMenTarJob Then - JobListView.SaveList(fbFileLists.Files(0)) - Else - CycleListView.SaveList(fbFileLists.Files(0)) - End If - End If - End Sub - - 'Load List - Private Sub LoadListToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles LoadListToolStripMenuItem.Click - - If GUIlocked Then Exit Sub - - If fbFileLists.OpenDialog("") Then - - If ConMenTarJob Then 'GEN - JobListView.LoadList(fbFileLists.Files(0)) - GENchecked = Me.LvGEN.CheckedItems.Count - UpdateJobTabText() - Else 'DRI - 'Mode toggle - If Not Me.CbBatch.Checked Then Me.CbBatch.Checked = True - CycleListView.LoadList(fbFileLists.Files(0)) - DRIchecked = Me.LvDRI.CheckedItems.Count - UpdateCycleTabText() - End If - - End If - End Sub - - 'Load Default List - Private Sub LoadDefaultListToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles LoadDefaultListToolStripMenuItem.Click - - If GUIlocked Then Exit Sub - - If ConMenTarJob Then - - JobListView.LoadList() - - GENchecked = Me.LvGEN.CheckedItems.Count - UpdateJobTabText() - Else - CycleListView.LoadList() - DRIchecked = Me.LvDRI.CheckedItems.Count - UpdateCycleTabText() - End If - End Sub - - 'Clear List - Private Sub ClearListToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles ClearListToolStripMenuItem.Click - 'Dim ListViewItem0 As ListViewItem - 'For Each ListViewItem0 In ConMenTarget.SelectedItems - ' ListViewItem0.Remove() - 'Next - If GUIlocked Then Exit Sub - - ConMenTarget.Items.Clear() - If ConMenTarJob Then - GENchecked = Me.LvGEN.CheckedItems.Count - UpdateJobTabText() - Else - DRIchecked = Me.LvDRI.CheckedItems.Count - UpdateCycleTabText() - End If - End Sub + 'Save List + Private Sub SaveListToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles SaveListToolStripMenuItem.Click + If fbFileLists.SaveDialog("") Then + If ConMenTarJob Then + JobListView.SaveList(fbFileLists.Files(0)) + Else + CycleListView.SaveList(fbFileLists.Files(0)) + End If + End If + End Sub + + 'Load List + Private Sub LoadListToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles LoadListToolStripMenuItem.Click + + If GUIlocked Then Exit Sub + + If fbFileLists.OpenDialog("") Then + + If ConMenTarJob Then 'GEN + JobListView.LoadList(fbFileLists.Files(0)) + GENchecked = Me.LvGEN.CheckedItems.Count + UpdateJobTabText() + Else 'DRI + 'Mode toggle + If Not Me.CbBatch.Checked Then Me.CbBatch.Checked = True + CycleListView.LoadList(fbFileLists.Files(0)) + DRIchecked = Me.LvDRI.CheckedItems.Count + UpdateCycleTabText() + End If + + End If + End Sub + + 'Load Default List + Private Sub LoadDefaultListToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles LoadDefaultListToolStripMenuItem.Click + + If GUIlocked Then Exit Sub + + If ConMenTarJob Then + + JobListView.LoadList() + + GENchecked = Me.LvGEN.CheckedItems.Count + UpdateJobTabText() + Else + CycleListView.LoadList() + DRIchecked = Me.LvDRI.CheckedItems.Count + UpdateCycleTabText() + End If + End Sub + + 'Clear List + Private Sub ClearListToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles ClearListToolStripMenuItem.Click + 'Dim ListViewItem0 As ListViewItem + 'For Each ListViewItem0 In ConMenTarget.SelectedItems + ' ListViewItem0.Remove() + 'Next + If GUIlocked Then Exit Sub + + ConMenTarget.Items.Clear() + If ConMenTarJob Then + GENchecked = Me.LvGEN.CheckedItems.Count + UpdateJobTabText() + Else + DRIchecked = Me.LvDRI.CheckedItems.Count + UpdateCycleTabText() + End If + End Sub #End Region - 'VECTO Start button - Calls VECTO_Launcher or aborts calculation - Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click + 'VECTO Start button - Calls VECTO_Launcher or aborts calculation + Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click - 'VECTO Start/Stop - If VECTOworker.IsBusy Then + 'VECTO Start/Stop + If VECTOworker.IsBusy Then - 'If VECTO already running: STOP - ComLineShutDown = False - JobAbort() + 'If VECTO already running: STOP + ComLineShutDown = False + JobAbort() - Else + Else - '...Otherwise: START + '...Otherwise: START - 'Save Lists if Crash - SaveFileLists() + 'Save Lists if Crash + SaveFileLists() - 'Start - VECTO_Launcher() + 'Start + VECTO_Launcher() - End If - End Sub + End If + End Sub - Private Sub btStartV3_Click(sender As Object, e As EventArgs) Handles btStartV3.Click - If Not VECTOworkerV3.IsBusy Then - 'Save Lists for Crash - SaveFileLists() + Private Sub btStartV3_Click(sender As Object, e As EventArgs) Handles btStartV3.Click + If Not VECTOworkerV3.IsBusy Then + 'Save Lists for Crash + SaveFileLists() - LvGEN.SelectedItems.Clear() + LvGEN.SelectedItems.Clear() - If LvGEN.CheckedItems.Count = 0 Then - GUImsg(tMsgID.Err, "No job file selected!") - Exit Sub - End If + If LvGEN.CheckedItems.Count = 0 Then + GUImsg(tMsgID.Err, "No job file selected!") + Exit Sub + End If - Status("Launching VECTO V3...") - JobFileList.Clear() - JobFileList.AddRange(From listViewItem In LvGEN.CheckedItems Select fFileRepl(listViewItem.SubItems(0).Text)) + Status("Launching VECTO V3...") + JobFileList.Clear() + JobFileList.AddRange(From listViewItem In LvGEN.CheckedItems Select fFileRepl(listViewItem.SubItems(0).Text)) - SetOptions() - Cfg.ConfigSAVE() - ClearMSG() + SetOptions() + Cfg.ConfigSAVE() + ClearMSG() - LockGUI(True) - btStartV3.Enabled = True - btStartV3.Text = "STOP" - btStartV3.Image = My.Resources.Stop_icon + LockGUI(True) + btStartV3.Enabled = True + btStartV3.Text = "STOP" + btStartV3.Image = My.Resources.Stop_icon - ToolStripProgBarOverall.Value = 0 - ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous - ToolStripProgBarOverall.Visible = True + ToolStripProgBarOverall.Value = 0 + ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous + ToolStripProgBarOverall.Visible = True - VECTOworkerV3.RunWorkerAsync() - Else - btStartV3.Enabled = False - btStartV3.Text = "Aborting..." - btStartV3.Image = My.Resources.Play_icon_gray - VECTOworkerV3.CancelAsync() - End If - End Sub + VECTOworkerV3.RunWorkerAsync() + Else + btStartV3.Enabled = False + btStartV3.Text = "Aborting..." + btStartV3.Image = My.Resources.Play_icon_gray + VECTOworkerV3.CancelAsync() + End If + End Sub - Private Sub VectoWorkerV3_OnDoWork(sender As BackgroundWorker, e As DoWorkEventArgs) - AllowSleepOFF() + Private Sub VectoWorkerV3_OnDoWork(sender As BackgroundWorker, e As DoWorkEventArgs) + AllowSleepOFF() - 'Dim sumFileName As String = Path.Combine(Path.GetDirectoryName(JobFileList(0)), Path.GetFileNameWithoutExtension(JobFileList(0)) + ".v3" + Constants.FileExtensions.SumFile) - Dim fileWriter As FileOutputWriter = New FileOutputWriter(JobFileList(0)) - Dim sumWriter As SummaryDataContainer = New SummaryDataContainer(fileWriter) - Dim jobContainer As JobContainer = New JobContainer(sumWriter) + 'Dim sumFileName As String = Path.Combine(Path.GetDirectoryName(JobFileList(0)), Path.GetFileNameWithoutExtension(JobFileList(0)) + ".v3" + Constants.FileExtensions.SumFile) + Dim fileWriter As FileOutputWriter = New FileOutputWriter(JobFileList(0)) + Dim sumWriter As SummaryDataContainer = New SummaryDataContainer(fileWriter) + Dim jobContainer As JobContainer = New JobContainer(sumWriter) - Dim mode As ExecutionMode + Dim mode As ExecutionMode - If Cfg.DeclMode Then - mode = ExecutionMode.Declaration - Else - mode = ExecutionMode.Engineering - End If + If Cfg.DeclMode Then + mode = ExecutionMode.Declaration + Else + mode = ExecutionMode.Engineering + End If - Dim doneProcesses As List(Of UInteger) = New List(Of UInteger) + Dim doneProcesses As List(Of UInteger) = New List(Of UInteger) - For Each jobFile As String In JobFileList - Try + For Each jobFile As String In JobFileList + Try sender.ReportProgress(0, New With {.Target = "ListBox", .Message = "Reading File " + jobFile, .Link = jobFile}) - Dim dataProvider As IInputDataProvider = JSONInputDataFactory.ReadJsonJob(jobFile) - Dim runsFactory As SimulatorFactory = New SimulatorFactory(mode, dataProvider, fileWriter) - runsFactory.WriteModalResults = Cfg.ModOut - jobContainer.AddRuns(runsFactory) + Dim dataProvider As IInputDataProvider = JSONInputDataFactory.ReadJsonJob(jobFile) + Dim runsFactory As SimulatorFactory = New SimulatorFactory(mode, dataProvider, fileWriter) + runsFactory.WriteModalResults = Cfg.ModOut + jobContainer.AddRuns(runsFactory) sender.ReportProgress(0, New With {.Target = "ListBox", .Message = "Finished Reading Data for job: " + jobFile}) - Catch ex As Exception - MsgBox(String.Format("ERROR running job {0}: {1}", jobFile, ex.Message), MsgBoxStyle.Critical) - sender.ReportProgress(0, New With {.Target = "ListBox", .Message = ex.Message}) - End Try - Next + Catch ex As Exception + MsgBox(String.Format("ERROR running job {0}: {1}", jobFile, ex.Message), MsgBoxStyle.Critical) + sender.ReportProgress(0, New With {.Target = "ListBoxError", .Message = ex.Message}) + End Try + Next For Each cycle As JobContainer.CycleTypeDescription In jobContainer.GetCycleTypes() sender.ReportProgress(0, New With {.Target = "ListBox", .Message = String.Format("Detected Cycle {0}: {1}", cycle.Name, cycle.CycleType)}) Next - + sender.ReportProgress(0, New With {.Target = "ListBox", .Message = String.Format("Starting Simulation ({0} Jobs, {1} Runs)", JobFileList.Count, jobContainer.GetProgress().Count)}) - jobContainer.Execute(True) - Dim start As DateTime = DateTime.Now() - - - While Not jobContainer.AllCompleted - If sender.CancellationPending Then - jobContainer.Cancel() - Return - End If - - Dim progress As Dictionary(Of UInteger, JobContainer.ProgressEntry) = jobContainer.GetProgress() - - Dim sumProgress As Double = progress.Sum(Function(pair) pair.Value.Progress) - Dim duration As Double = (DateTime.Now() - start).TotalSeconds - - sender.ReportProgress(Int((sumProgress * 100.0) / progress.Count), - New With {.Target = "Status", .Message = - String.Format("Duration: {0:0}s, Current Progress: {1:P} ({2})", duration, - sumProgress / progress.Count, - String.Join(", ", - progress.Select( - Function(pair) _ - String.Format("{0,4:P}", - pair.Value.Progress))))}) - - For Each p As KeyValuePair(Of UInteger, JobContainer.ProgressEntry) In progress - If p.Value.Done And Not doneProcesses.Contains(p.Key) Then - Dim modFilename As String = fileWriter.GetModDataFileName(p.Value.RunName, p.Value.CycleName, - p.Value.RunSuffix) - Dim runName As String = String.Format("{0} {1} {2}", p.Value.RunName, p.Value.CycleName, p.Value.RunSuffix) - sender.ReportProgress(0, - New _ - With {.Target = "ListBox", - .Message = String.Format("Finished Run {0}", runName)}) - If Not p.Value.Error Is Nothing Then - sender.ReportProgress(0, New With {.Target = "ListBox", - .Message = - String.Format("ERROR {0}: {1}", runName, p.Value.Error.Message), - .Link = modFilename}) - End If - 'If Not Cfg.DeclMode Then - sender.ReportProgress(0, New With {.Target = "ListBox", - .Message = - String.Format("Run {0}: Modal Results written to {1}", runName, modFilename), - .Link = modFilename}) - 'End If - - doneProcesses.Add(p.Key) - End If - Next - Thread.Sleep(500) - End While - - Dim sumFilename As String = fileWriter.GetSumFileName() - If File.Exists(sumFilename) Then - sender.ReportProgress(100, - New _ - With {.Target = "ListBox", - .Message = String.Format("Sum File written to {0}", sumFilename), - .Link = sumFilename}) - End If - If Cfg.DeclMode Then - For Each job As String In JobFileList - Dim report As String = Path.Combine(Path.GetDirectoryName(job), - Path.GetFileNameWithoutExtension(job) + ".pdf") - - If File.Exists(report) Then - sender.ReportProgress(100, - New _ - With {.Target = "ListBox", - .Message = String.Format("PDF Report written to {0}", report), - .Link = report}) - End If - Next - End If - - For Each progressEntry As KeyValuePair(Of UInteger, JobContainer.ProgressEntry) In jobContainer.GetProgress() - Dim runName As String = String.Format("{0} {1} {2}", progressEntry.Value.RunName, progressEntry.Value.CycleName, progressEntry.Value.RunSuffix) - sender.ReportProgress(100, - New _ - With {.Target = "ListBox", - .Message = String.Format("{0,-60} {1,8:P} {2,10:F2}s - {3}", - runName, progressEntry.Value.Progress, - progressEntry.Value.ExecTime / 1000.0, - IIf(progressEntry.Value.Success, "Success", "Aborted"))}) - If (Not progressEntry.Value.Success) Then - sender.ReportProgress(100, New With {.Target = "ListBox", .Message = progressEntry.Value.Error.Message}) - End If - - Next - - sender.ReportProgress(100, New With {.Target = "ListBox", .Message = "Simulation Finished"}) - End Sub - - Private Sub VectoWorkerV3_OnProgressChanged(sender As Object, e As ProgressChangedEventArgs) - ToolStripProgBarOverall.Value = e.ProgressPercentage - Select Case e.UserState.Target - Case "ListBox" - If e.UserState.GetType().GetProperty("Link") Is Nothing Then - MSGtoForm(tMsgID.Normal, e.UserState.Message, "", "") - Else - MSGtoForm(tMsgID.Normal, e.UserState.Message, "", e.UserState.Link) - End If - Case "Status" - Status(e.UserState.Message) - End Select - End Sub - - Private Sub VectoWorkerV3_OnRunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) - Dim Result As tCalcResult - - 'Progbar reset - ToolStripProgBarOverall.Visible = False - ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous - ToolStripProgBarOverall.Value = 0 - ProgSecStop() - - LvGEN.SelectedIndices.Clear() - - Result = e.Result - - 'ShutDown when Unexpected Error - If e.Error IsNot Nothing Then - MsgBox("An Unexpected Error occurred!" & ChrW(10) & ChrW(10) & - e.Error.Message.ToString, MsgBoxStyle.Critical, "Unexpected Error") - LogFile.WriteToLog(tMsgID.Err, ">>>Unexpected Error:" & e.Error.ToString()) - End If - - 'Options enable / GUI reset - LockGUI(False) - btStartV3.Text = "START V3" - btStartV3.Image = My.Resources.Play_icon - Status(LastModeName & " Mode") - - 'SLEEP reactivate - AllowSleepON() - End Sub - - 'Mode Change (STANDARD/BATCH) - Private Sub CbBatch_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CbBatch.CheckedChanged - ModeUpdate() - End Sub - - Private Sub ModeUpdate() - - 'Save lists - JobListView.SaveList() - If Cfg.BatchMode Then CycleListView.SaveList() - - 'New mode - Cfg.BatchMode = Me.CbBatch.Checked - - 'GUI changes according to current mode - - If Cfg.BatchMode Then - - LastModeName = "Batch" - - 'Load cycle list - CycleListView.LoadList() - - 'Update cycle counter - DRIchecked = Me.LvDRI.CheckedItems.Count - UpdateCycleTabText() - - 'Show mode-specific settings - Me.GrBoxSTD.Visible = False - Me.GrBoxBATCH.Visible = True - - 'Show Cycle Tab Page - If Not CycleTabPageVisible Then - Me.TabControl1.TabPages.Insert(1, CycleTabPage) - CycleTabPageVisible = True - End If - - Else - - If Cfg.DeclMode Then - LastModeName = "Declaration" - Else - LastModeName = "Engineering" - End If - - 'Show mode-specific settings - Me.GrBoxSTD.Visible = False 'Currently no specific settings for STANDARD mode, therefore always 'False' - Me.GrBoxBATCH.Visible = False - - 'Hide Cycle Tab Page - If CycleTabPageVisible Then - Me.TabControl1.Controls.Remove(CycleTabPage) - CycleTabPageVisible = False - End If - - End If - - 'Update job counter - GENchecked = Me.LvGEN.CheckedItems.Count - UpdateJobTabText() - - 'Status label - Status(LastModeName & " Mode") - End Sub - - 'Class for ListView control - Job and cycle lists - Private Class cFileListView - Private FilePath As String - Private LoadedDefault As Boolean - Public LVbox As ListView - - Public Sub New(ByVal Path As String) - FilePath = Path - LoadedDefault = False - End Sub - - Public Sub SaveList(Optional ByVal Path As String = "") - Dim x As Int32 - Dim file As cFile_V3 - 'If LVbox.Items.Count = 0 Then Exit Sub - file = New cFile_V3 - If Path = "" Then - If Not LoadedDefault Then Exit Sub - Path = FilePath - End If - file.OpenWrite(Path, "?") - For x = 1 To LVbox.Items.Count - file.WriteLine(LVbox.Items(x - 1).SubItems(0).Text, Math.Abs(CInt(LVbox.Items(x - 1).Checked))) - Next - file.Close() - file = Nothing - End Sub - - Public Sub LoadList(Optional ByVal Path As String = "") - Dim line As String() - Dim NoCheck As Boolean - Dim file As cFile_V3 - Dim ListViewItem0 As ListViewItem - - If Path = "" Then - Path = FilePath - LoadedDefault = True - End If - - file = New cFile_V3 - - If Not file.OpenRead(Path, "?") Then - If Not LoadedDefault Then GUImsg(tMsgID.Err, "Cannot open file (" & Path & ")!") - Exit Sub - End If - - F_MAINForm.CheckLock = True - LVbox.BeginUpdate() - - LVbox.Items.Clear() - - NoCheck = False - Do While Not file.EndOfFile - line = file.ReadLine - - ListViewItem0 = New ListViewItem(line(0)) - ListViewItem0.SubItems.Add(" ") - - If NoCheck Then - ListViewItem0.Checked = True - Else - If UBound(line) < 1 Then - NoCheck = True - ListViewItem0.Checked = True - Else - If IsNumeric(line(1)) Then - ListViewItem0.Checked = CBool(line(1)) - Else - ListViewItem0.Checked = True - End If - End If - End If - LVbox.Items.Add(ListViewItem0) - Loop - - file.Close() - - LVbox.EndUpdate() - F_MAINForm.CheckLock = False - - If LVbox.Items.Count > 0 Then LVbox.Items(LVbox.Items.Count - 1).EnsureVisible() - End Sub - End Class - - 'Set color of job files in list (Error, Warnings, Currently running, etc.) - Private Sub SetCheckedItemColor(ByVal LvID As Integer, ByVal Status As tJobStatus) - Dim lv0 As ListViewItem - - lv0 = CheckedItems(LvID) - - Select Case Status - Case tJobStatus.Err - lv0.BackColor = Color.Red - lv0.ForeColor = Color.White - Case tJobStatus.OK - lv0.BackColor = Color.White - lv0.ForeColor = Color.DarkGreen - Case tJobStatus.Warn - lv0.BackColor = Color.Khaki - lv0.ForeColor = Color.DarkBlue 'FromArgb(218, 125, 0) 'DarkOrange 'OrangeRed - Case tJobStatus.Queued - lv0.BackColor = Color.LightGray - lv0.ForeColor = Color.DarkBlue - Case tJobStatus.Running - lv0.BackColor = Color.DarkBlue - lv0.ForeColor = Color.White - Case tJobStatus.Undef - lv0.BackColor = Color.FromKnownColor(KnownColor.Window) - lv0.ForeColor = Color.FromKnownColor(KnownColor.WindowText) - End Select - End Sub - - 'Open Job Editor and open file (or new file) - Friend Sub OpenVECTOeditor(ByVal x As String) - - If Not F_VECTO.Visible Then - F_VECTO.Show() - Else - If F_VECTO.WindowState = FormWindowState.Minimized Then F_VECTO.WindowState = FormWindowState.Normal - F_VECTO.BringToFront() - End If - - If x = "<New>" Then - F_VECTO.VECTOnew() - Else - F_VECTO.VECTOload2Form(x) - End If - - F_VECTO.Activate() - End Sub - - 'Open signature file (.vsig) - Friend Sub OpenSigFile(ByVal file As String) - If Not F_FileSign.Visible Then - F_FileSign.Show() - - End If - F_FileSign.WindowState = FormWindowState.Normal - F_FileSign.TbSigFile.Text = file - F_FileSign.VerifySigFile() - F_FileSign.Activate() - End Sub - - 'Save job and cycle file lists - Private Sub SaveFileLists() - JobListView.SaveList() - If Cfg.BatchMode Then CycleListView.SaveList() - End Sub + jobContainer.Execute(True) + Dim start As DateTime = DateTime.Now() + + While Not jobContainer.AllCompleted + If sender.CancellationPending Then + jobContainer.Cancel() + Return + End If + + Dim progress As Dictionary(Of UInteger, JobContainer.ProgressEntry) = jobContainer.GetProgress() + + Dim sumProgress As Double = progress.Sum(Function(pair) pair.Value.Progress) + Dim duration As Double = (DateTime.Now() - start).TotalSeconds + + sender.ReportProgress(Int((sumProgress * 100.0) / progress.Count), + New With {.Target = "Status", .Message = String.Format("Duration: {0:0}s, Current Progress: {1:P} ({2})", duration, sumProgress / progress.Count, + String.Join(", ", progress.Select(Function(pair) String.Format("{0,4:P}", pair.Value.Progress))))}) + + For Each p As KeyValuePair(Of UInteger, JobContainer.ProgressEntry) In progress + If p.Value.Done And Not doneProcesses.Contains(p.Key) Then + Dim modFilename As String = fileWriter.GetModDataFileName(p.Value.RunName, p.Value.CycleName, p.Value.RunSuffix) + Dim runName As String = String.Format("{0} {1} {2}", p.Value.RunName, p.Value.CycleName, p.Value.RunSuffix) + sender.ReportProgress(0, New With {.Target = "ListBox", .Message = String.Format("Finished Run {0}", runName)}) + If Not p.Value.Error Is Nothing Then + sender.ReportProgress(0, New With {.Target = "ListBoxError", .Message = String.Format("ERROR {0}: {1}", runName, p.Value.Error.Message), .Link = modFilename}) + End If + 'If Not Cfg.DeclMode Then + sender.ReportProgress(0, New With {.Target = "ListBox", .Message = String.Format("Run {0}: Modal Results written to {1}", runName, modFilename), .Link = modFilename}) + 'End If + + doneProcesses.Add(p.Key) + End If + Next + Thread.Sleep(250) + End While + + Dim sumFilename As String = fileWriter.GetSumFileName() + If File.Exists(sumFilename) Then + sender.ReportProgress(100, New With {.Target = "ListBox", .Message = String.Format("Sum File written to {0}", sumFilename), .Link = sumFilename}) + End If + If Cfg.DeclMode Then + For Each job As String In JobFileList + Dim report As String = Path.Combine(Path.GetDirectoryName(job), Path.GetFileNameWithoutExtension(job) + ".pdf") + + If File.Exists(report) Then + sender.ReportProgress(100, New With {.Target = "ListBox", .Message = String.Format("PDF Report written to {0}", report), .Link = report}) + End If + Next + End If + + For Each progressEntry As KeyValuePair(Of UInteger, JobContainer.ProgressEntry) In jobContainer.GetProgress() + Dim runName As String = String.Format("{0} {1} {2}", progressEntry.Value.RunName, progressEntry.Value.CycleName, progressEntry.Value.RunSuffix) + sender.ReportProgress(100, New With {.Target = "ListBox", .Message = String.Format("{0,-60} {1,8:P} {2,10:F2}s - {3}", runName, progressEntry.Value.Progress, + progressEntry.Value.ExecTime / 1000.0, + IIf(progressEntry.Value.Success, "Success", "Aborted"))}) + If (Not progressEntry.Value.Success) Then + sender.ReportProgress(100, New With {.Target = "ListBox", .Message = progressEntry.Value.Error.Message}) + End If + + Next + + sender.ReportProgress(100, New With {.Target = "ListBox", .Message = "Simulation Finished"}) + End Sub + + Private Sub VectoWorkerV3_OnProgressChanged(sender As Object, e As ProgressChangedEventArgs) + ToolStripProgBarOverall.Value = e.ProgressPercentage + Select Case e.UserState.Target + Case "ListBox" + If e.UserState.GetType().GetProperty("Link") Is Nothing Then + MSGtoForm(tMsgID.Normal, e.UserState.Message, "", "") + Else + MSGtoForm(tMsgID.Normal, e.UserState.Message, "", e.UserState.Link) + End If + Case "ListBoxWarning" + MSGtoForm(tMsgID.Warn, e.UserState.Message, "", "") + Case "ListBoxError" + MSGtoForm(tMsgID.Err, e.UserState.Message, "", "") + Case "Status" + Status(e.UserState.Message) + End Select + End Sub + + Private Sub VectoWorkerV3_OnRunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) + Dim Result As tCalcResult + + 'Progbar reset + ToolStripProgBarOverall.Visible = False + ToolStripProgBarOverall.Style = ProgressBarStyle.Continuous + ToolStripProgBarOverall.Value = 0 + ProgSecStop() + + LvGEN.SelectedIndices.Clear() + + Result = e.Result + + 'ShutDown when Unexpected Error + If e.Error IsNot Nothing Then + MsgBox("An Unexpected Error occurred!" & ChrW(10) & ChrW(10) & + e.Error.Message.ToString, MsgBoxStyle.Critical, "Unexpected Error") + LogFile.WriteToLog(tMsgID.Err, ">>>Unexpected Error:" & e.Error.ToString()) + End If + + 'Options enable / GUI reset + LockGUI(False) + btStartV3.Text = "START V3" + btStartV3.Image = My.Resources.Play_icon + Status(LastModeName & " Mode") + + 'SLEEP reactivate + AllowSleepON() + End Sub + + 'Mode Change (STANDARD/BATCH) + Private Sub CbBatch_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CbBatch.CheckedChanged + ModeUpdate() + End Sub + + Private Sub ModeUpdate() + + 'Save lists + JobListView.SaveList() + If Cfg.BatchMode Then CycleListView.SaveList() + + 'New mode + Cfg.BatchMode = Me.CbBatch.Checked + + 'GUI changes according to current mode + + If Cfg.BatchMode Then + + LastModeName = "Batch" + + 'Load cycle list + CycleListView.LoadList() + + 'Update cycle counter + DRIchecked = Me.LvDRI.CheckedItems.Count + UpdateCycleTabText() + + 'Show mode-specific settings + Me.GrBoxSTD.Visible = False + Me.GrBoxBATCH.Visible = True + + 'Show Cycle Tab Page + If Not CycleTabPageVisible Then + Me.TabControl1.TabPages.Insert(1, CycleTabPage) + CycleTabPageVisible = True + End If + + Else + + If Cfg.DeclMode Then + LastModeName = "Declaration" + Else + LastModeName = "Engineering" + End If + + 'Show mode-specific settings + Me.GrBoxSTD.Visible = False 'Currently no specific settings for STANDARD mode, therefore always 'False' + Me.GrBoxBATCH.Visible = False + + 'Hide Cycle Tab Page + If CycleTabPageVisible Then + Me.TabControl1.Controls.Remove(CycleTabPage) + CycleTabPageVisible = False + End If + + End If + + 'Update job counter + GENchecked = Me.LvGEN.CheckedItems.Count + UpdateJobTabText() + + 'Status label + Status(LastModeName & " Mode") + End Sub + + 'Class for ListView control - Job and cycle lists + Private Class cFileListView + Private FilePath As String + Private LoadedDefault As Boolean + Public LVbox As ListView + + Public Sub New(ByVal Path As String) + FilePath = Path + LoadedDefault = False + End Sub + + Public Sub SaveList(Optional ByVal Path As String = "") + Dim x As Int32 + Dim file As cFile_V3 + 'If LVbox.Items.Count = 0 Then Exit Sub + file = New cFile_V3 + If Path = "" Then + If Not LoadedDefault Then Exit Sub + Path = FilePath + End If + file.OpenWrite(Path, "?") + For x = 1 To LVbox.Items.Count + file.WriteLine(LVbox.Items(x - 1).SubItems(0).Text, Math.Abs(CInt(LVbox.Items(x - 1).Checked))) + Next + file.Close() + file = Nothing + End Sub + + Public Sub LoadList(Optional ByVal Path As String = "") + Dim line As String() + Dim NoCheck As Boolean + Dim file As cFile_V3 + Dim ListViewItem0 As ListViewItem + + If Path = "" Then + Path = FilePath + LoadedDefault = True + End If + + file = New cFile_V3 + + If Not file.OpenRead(Path, "?") Then + If Not LoadedDefault Then GUImsg(tMsgID.Err, "Cannot open file (" & Path & ")!") + Exit Sub + End If + + F_MAINForm.CheckLock = True + LVbox.BeginUpdate() + + LVbox.Items.Clear() + + NoCheck = False + Do While Not file.EndOfFile + line = file.ReadLine + + ListViewItem0 = New ListViewItem(line(0)) + ListViewItem0.SubItems.Add(" ") + + If NoCheck Then + ListViewItem0.Checked = True + Else + If UBound(line) < 1 Then + NoCheck = True + ListViewItem0.Checked = True + Else + If IsNumeric(line(1)) Then + ListViewItem0.Checked = CBool(line(1)) + Else + ListViewItem0.Checked = True + End If + End If + End If + LVbox.Items.Add(ListViewItem0) + Loop + + file.Close() + + LVbox.EndUpdate() + F_MAINForm.CheckLock = False + + If LVbox.Items.Count > 0 Then LVbox.Items(LVbox.Items.Count - 1).EnsureVisible() + End Sub + End Class + + 'Set color of job files in list (Error, Warnings, Currently running, etc.) + Private Sub SetCheckedItemColor(ByVal LvID As Integer, ByVal Status As tJobStatus) + Dim lv0 As ListViewItem + + lv0 = CheckedItems(LvID) + + Select Case Status + Case tJobStatus.Err + lv0.BackColor = Color.Red + lv0.ForeColor = Color.White + Case tJobStatus.OK + lv0.BackColor = Color.White + lv0.ForeColor = Color.DarkGreen + Case tJobStatus.Warn + lv0.BackColor = Color.Khaki + lv0.ForeColor = Color.DarkBlue 'FromArgb(218, 125, 0) 'DarkOrange 'OrangeRed + Case tJobStatus.Queued + lv0.BackColor = Color.LightGray + lv0.ForeColor = Color.DarkBlue + Case tJobStatus.Running + lv0.BackColor = Color.DarkBlue + lv0.ForeColor = Color.White + Case tJobStatus.Undef + lv0.BackColor = Color.FromKnownColor(KnownColor.Window) + lv0.ForeColor = Color.FromKnownColor(KnownColor.WindowText) + End Select + End Sub + + 'Open Job Editor and open file (or new file) + Friend Sub OpenVECTOeditor(ByVal x As String) + + If Not F_VECTO.Visible Then + F_VECTO.Show() + Else + If F_VECTO.WindowState = FormWindowState.Minimized Then F_VECTO.WindowState = FormWindowState.Normal + F_VECTO.BringToFront() + End If + + If x = "<New>" Then + F_VECTO.VECTOnew() + Else + F_VECTO.VECTOload2Form(x) + End If + + F_VECTO.Activate() + End Sub + + 'Open signature file (.vsig) + Friend Sub OpenSigFile(ByVal file As String) + If Not F_FileSign.Visible Then + F_FileSign.Show() + + End If + F_FileSign.WindowState = FormWindowState.Normal + F_FileSign.TbSigFile.Text = file + F_FileSign.VerifySigFile() + F_FileSign.Activate() + End Sub + + 'Save job and cycle file lists + Private Sub SaveFileLists() + JobListView.SaveList() + If Cfg.BatchMode Then CycleListView.SaveList() + End Sub #Region "Progressbar controls" - 'Initialise progress bar (Start of next job in calculation) - Private Sub ProgSecStart() - Me.ToolStripProgBarJob.Value = 0 - Me.ToolStripProgBarJob.Style = ProgressBarStyle.Marquee - Me.ToolStripProgBarJob.Visible = True - Me.TmProgSec.Start() - End Sub - - 'Stop - Hide progress bar - Private Sub ProgSecStop() - Me.TmProgSec.Stop() - Me.ToolStripProgBarJob.Visible = False - Me.ToolStripProgBarJob.Value = 0 - End Sub - - 'Timer to update progress bar regularly - Private Sub TmProgSec_Tick(sender As Object, e As System.EventArgs) Handles TmProgSec.Tick - If GUItest0.TestActive Then - Call GUItest0.TestTick() - Exit Sub - Else - If Not ProgBarCtrl.ProgLock Then ProgSecUpdate() - End If - End Sub - - 'Update progress bar (timer controlled) - Private Sub ProgSecUpdate() - - With ProgBarCtrl - - If .ProgJobInt > 0 AndAlso Me.ToolStripProgBarJob.Style = ProgressBarStyle.Marquee Then - Me.ToolStripProgBarJob.Style = ProgressBarStyle.Continuous - End If - - If .ProgJobInt < 0 Then - .ProgJobInt = 0 - ElseIf .ProgJobInt > 100 Then - .ProgJobInt = 100 - End If - - Me.ToolStripProgBarJob.Value = .ProgJobInt - - If .ProgOverallStartInt > -1 Then - Me.ToolStripProgBarOverall.Value = - CInt(.ProgOverallStartInt + (.PgroOverallEndInt - .ProgOverallStartInt) * .ProgJobInt / 100) - End If - - End With - End Sub + 'Initialise progress bar (Start of next job in calculation) + Private Sub ProgSecStart() + Me.ToolStripProgBarJob.Value = 0 + Me.ToolStripProgBarJob.Style = ProgressBarStyle.Marquee + Me.ToolStripProgBarJob.Visible = True + Me.TmProgSec.Start() + End Sub + + 'Stop - Hide progress bar + Private Sub ProgSecStop() + Me.TmProgSec.Stop() + Me.ToolStripProgBarJob.Visible = False + Me.ToolStripProgBarJob.Value = 0 + End Sub + + 'Timer to update progress bar regularly + Private Sub TmProgSec_Tick(sender As Object, e As System.EventArgs) Handles TmProgSec.Tick + If GUItest0.TestActive Then + Call GUItest0.TestTick() + Exit Sub + Else + If Not ProgBarCtrl.ProgLock Then ProgSecUpdate() + End If + End Sub + + 'Update progress bar (timer controlled) + Private Sub ProgSecUpdate() + + With ProgBarCtrl + + If .ProgJobInt > 0 AndAlso Me.ToolStripProgBarJob.Style = ProgressBarStyle.Marquee Then + Me.ToolStripProgBarJob.Style = ProgressBarStyle.Continuous + End If + + If .ProgJobInt < 0 Then + .ProgJobInt = 0 + ElseIf .ProgJobInt > 100 Then + .ProgJobInt = 100 + End If + + Me.ToolStripProgBarJob.Value = .ProgJobInt + + If .ProgOverallStartInt > -1 Then + Me.ToolStripProgBarOverall.Value = + CInt(.ProgOverallStartInt + (.PgroOverallEndInt - .ProgOverallStartInt) * .ProgJobInt / 100) + End If + + End With + End Sub #End Region #Region "Options Tab" - 'Load options from config class - Public Sub LoadOptions() - Me.ChBoxCyclDistCor.Checked = Cfg.DistCorr - Me.ChBoxUseGears.Checked = Cfg.GnUfromCycle - Me.ChBoxModOut.Checked = Cfg.ModOut - CbBOmode.SelectedIndex = -1 - Select Case UCase(Cfg.BATCHoutpath) - Case sKey.JobPath - CbBOmode.SelectedIndex = 0 - Case Else - CbBOmode.SelectedIndex = 1 - Me.TbBOpath.Text = Cfg.BATCHoutpath - End Select - Me.ChBoxBatchSubD.Checked = Cfg.BATCHoutSubD - - 'Set Mode - If Not Cfg.DeclMode Then Me.CbBatch.Checked = Cfg.BatchMode - - Me.RbDecl.Checked = Cfg.DeclMode - End Sub - - 'Update config class from options in GUI, e.g. before running calculations - Private Sub SetOptions() - - 'General(Allgemein) - Cfg.DistCorr = Me.ChBoxCyclDistCor.Checked - Cfg.GnUfromCycle = Me.ChBoxUseGears.Checked - - 'BATCH - Cfg.ModOut = Me.ChBoxModOut.Checked - Select Case CbBOmode.SelectedIndex - Case 0 - Cfg.BATCHoutpath = sKey.JobPath - Case Else - Cfg.BATCHoutpath = Trim(Me.TbBOpath.Text) - If Microsoft.VisualBasic.Right(Cfg.BATCHoutpath, 1) <> "\" Then Cfg.BATCHoutpath &= "\" - End Select - Cfg.BATCHoutSubD = Me.ChBoxBatchSubD.Checked - - DEV.SetOptions() - End Sub + 'Load options from config class + Public Sub LoadOptions() + Me.ChBoxCyclDistCor.Checked = Cfg.DistCorr + Me.ChBoxUseGears.Checked = Cfg.GnUfromCycle + Me.ChBoxModOut.Checked = Cfg.ModOut + CbBOmode.SelectedIndex = -1 + Select Case UCase(Cfg.BATCHoutpath) + Case sKey.JobPath + CbBOmode.SelectedIndex = 0 + Case Else + CbBOmode.SelectedIndex = 1 + Me.TbBOpath.Text = Cfg.BATCHoutpath + End Select + Me.ChBoxBatchSubD.Checked = Cfg.BATCHoutSubD + + 'Set Mode + If Not Cfg.DeclMode Then Me.CbBatch.Checked = Cfg.BatchMode + + Me.RbDecl.Checked = Cfg.DeclMode + End Sub + + 'Update config class from options in GUI, e.g. before running calculations + Private Sub SetOptions() + + 'General(Allgemein) + Cfg.DistCorr = Me.ChBoxCyclDistCor.Checked + Cfg.GnUfromCycle = Me.ChBoxUseGears.Checked + + 'BATCH + Cfg.ModOut = Me.ChBoxModOut.Checked + Select Case CbBOmode.SelectedIndex + Case 0 + Cfg.BATCHoutpath = sKey.JobPath + Case Else + Cfg.BATCHoutpath = Trim(Me.TbBOpath.Text) + If Microsoft.VisualBasic.Right(Cfg.BATCHoutpath, 1) <> "\" Then Cfg.BATCHoutpath &= "\" + End Select + Cfg.BATCHoutSubD = Me.ChBoxBatchSubD.Checked + + DEV.SetOptions() + End Sub #Region "Events" - Private Sub ChBoxAutoSD_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles ChBoxAutoSD.CheckedChanged - Me.LbAutoShDown.Visible = Me.ChBoxAutoSD.Checked - End Sub + Private Sub ChBoxAutoSD_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles ChBoxAutoSD.CheckedChanged + Me.LbAutoShDown.Visible = Me.ChBoxAutoSD.Checked + End Sub - Private Sub CbBOmode_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles CbBOmode.SelectedIndexChanged - Me.TbBOpath.Visible = (Me.CbBOmode.SelectedIndex = 2) - Me.ButBObrowse.Visible = (Me.CbBOmode.SelectedIndex = 2) - End Sub + Private Sub CbBOmode_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles CbBOmode.SelectedIndexChanged + Me.TbBOpath.Visible = (Me.CbBOmode.SelectedIndex = 2) + Me.ButBObrowse.Visible = (Me.CbBOmode.SelectedIndex = 2) + End Sub - Private Sub ButBObrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButBObrowse.Click - If fbFolder.OpenDialog(Me.TbBOpath.Text) Then - Me.TbBOpath.Text = fbFolder.Files(0) - End If - End Sub + Private Sub ButBObrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButBObrowse.Click + If fbFolder.OpenDialog(Me.TbBOpath.Text) Then + Me.TbBOpath.Text = fbFolder.Files(0) + End If + End Sub - Private Sub ChBoxBatchOut_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ - Handles ChBoxModOut.CheckedChanged - Me.ChBoxBatchSubD.Enabled = Me.ChBoxModOut.Checked - End Sub + Private Sub ChBoxBatchOut_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ + Handles ChBoxModOut.CheckedChanged + Me.ChBoxBatchSubD.Enabled = Me.ChBoxModOut.Checked + End Sub #End Region @@ -2077,658 +2099,658 @@ lbFound: #Region "Developer options (DEV) Tab" - 'Load DEV options - Private Sub LoadDEVconfigs() - Dim LV0 As ListViewItem - Dim i As Integer - Dim Config0 As KeyValuePair(Of String, cDEVoption) + 'Load DEV options + Private Sub LoadDEVconfigs() + Dim LV0 As ListViewItem + Dim i As Integer + Dim Config0 As KeyValuePair(Of String, cDEVoption) - Me.LvDEVoptions.Items.Clear() + Me.LvDEVoptions.Items.Clear() - i = -1 - For Each Config0 In DEV.Options - i += 1 + i = -1 + For Each Config0 In DEV.Options + i += 1 - LV0 = New ListViewItem - LV0.SubItems(0).Text = Config0.Key - LV0.SubItems.Add(Config0.Value.Description) - LV0.SubItems.Add(Config0.Value.TypeString) - LV0.SubItems.Add("") - LV0.SubItems.Add(Config0.Value.ValTextDef) + LV0 = New ListViewItem + LV0.SubItems(0).Text = Config0.Key + LV0.SubItems.Add(Config0.Value.Description) + LV0.SubItems.Add(Config0.Value.TypeString) + LV0.SubItems.Add("") + LV0.SubItems.Add(Config0.Value.ValTextDef) - If Config0.Value.ConfigType = tDEVconfType.tAction Then - LV0.SubItems.Add("") - Else - If Config0.Value.SaveInFile Then - LV0.SubItems.Add("True") - Else - LV0.SubItems.Add("False") - End If - End If + If Config0.Value.ConfigType = tDEVconfType.tAction Then + LV0.SubItems.Add("") + Else + If Config0.Value.SaveInFile Then + LV0.SubItems.Add("True") + Else + LV0.SubItems.Add("False") + End If + End If - LV0.Tag = Config0.Key + LV0.Tag = Config0.Key - If Not Config0.Value.Enabled Then - LV0.ForeColor = Color.DarkGray - End If + If Not Config0.Value.Enabled Then + LV0.ForeColor = Color.DarkGray + End If - Me.LvDEVoptions.Items.Add(LV0) + Me.LvDEVoptions.Items.Add(LV0) - UpdateDEVconfigs(LV0) + UpdateDEVconfigs(LV0) - Next - End Sub + Next + End Sub - 'Update value of specific DEV option - Private Sub UpdateDEVconfigs(ByRef LV0 As ListViewItem) - DEV.UpdateDevConfigs() - End Sub + 'Update value of specific DEV option + Private Sub UpdateDEVconfigs(ByRef LV0 As ListViewItem) + DEV.UpdateDevConfigs() + End Sub - 'Change value of DEV option or execute action-type DEV options - Private Sub LvDEVoptions_DoubleClick(sender As Object, e As System.EventArgs) Handles LvDEVoptions.DoubleClick - Dim Config0 As cDEVoption - Dim str As String - Dim i As Integer + 'Change value of DEV option or execute action-type DEV options + Private Sub LvDEVoptions_DoubleClick(sender As Object, e As System.EventArgs) Handles LvDEVoptions.DoubleClick + Dim Config0 As cDEVoption + Dim str As String + Dim i As Integer - Config0 = DEV.Options(Me.LvDEVoptions.SelectedItems(0).Tag) + Config0 = DEV.Options(Me.LvDEVoptions.SelectedItems(0).Tag) - If Not Config0.Enabled Then Exit Sub + If Not Config0.Enabled Then Exit Sub - Select Case Config0.ConfigType - Case tDEVconfType.tAction - Config0.DoAction() + Select Case Config0.ConfigType + Case tDEVconfType.tAction + Config0.DoAction() - Case tDEVconfType.tBoolean - Config0.BoolVal = Not Config0.BoolVal + Case tDEVconfType.tBoolean + Config0.BoolVal = Not Config0.BoolVal - Case tDEVconfType.tSelection + Case tDEVconfType.tSelection - CmDEVitem = Me.LvDEVoptions.SelectedItems(0) + CmDEVitem = Me.LvDEVoptions.SelectedItems(0) - CmDEV.Items.Clear() + CmDEV.Items.Clear() - i = -1 - For Each str In Config0.Modes - i += 1 - CmDEV.Items.Add("(" & i & ") " & str) - CmDEV.Items(i).Tag = i - Next + i = -1 + For Each str In Config0.Modes + i += 1 + CmDEV.Items.Add("(" & i & ") " & str) + CmDEV.Items(i).Tag = i + Next - CmDEV.Show(Cursor.Position) + CmDEV.Show(Cursor.Position) - Case tDEVconfType.tIntVal - str = InputBox("New Value <" & Config0.TypeString & "> =", , Config0.ValToString) - If str <> "" AndAlso IsNumeric(str) Then - Config0.IntVal = CInt(str) - End If + Case tDEVconfType.tIntVal + str = InputBox("New Value <" & Config0.TypeString & "> =", , Config0.ValToString) + If str <> "" AndAlso IsNumeric(str) Then + Config0.IntVal = CInt(str) + End If - Case tDEVconfType.tSingleVal - str = InputBox("New Value <" & Config0.TypeString & "> =", , Config0.ValToString) - If str <> "" AndAlso IsNumeric(str) Then - Config0.SingleVal = CSng(str) - End If + Case tDEVconfType.tSingleVal + str = InputBox("New Value <" & Config0.TypeString & "> =", , Config0.ValToString) + If str <> "" AndAlso IsNumeric(str) Then + Config0.SingleVal = CSng(str) + End If - Case Else 'tDEVconfType.tStringVal - Dim dlg As New F_StrInpBox - Config0.StringVal = dlg.ShowDlog("New Value <" & Config0.TypeString & "> =", Config0.StringVal) - End Select + Case Else 'tDEVconfType.tStringVal + Dim dlg As New F_StrInpBox + Config0.StringVal = dlg.ShowDlog("New Value <" & Config0.TypeString & "> =", Config0.StringVal) + End Select - UpdateDEVconfigs(Me.LvDEVoptions.SelectedItems(0)) - End Sub + UpdateDEVconfigs(Me.LvDEVoptions.SelectedItems(0)) + End Sub - 'Context menu for selection-type DEV options - Private Sub CmDEV_ItemClicked(sender As Object, e As System.Windows.Forms.ToolStripItemClickedEventArgs) _ - Handles CmDEV.ItemClicked - Dim i As Integer + 'Context menu for selection-type DEV options + Private Sub CmDEV_ItemClicked(sender As Object, e As System.Windows.Forms.ToolStripItemClickedEventArgs) _ + Handles CmDEV.ItemClicked + Dim i As Integer - i = e.ClickedItem.Tag + i = e.ClickedItem.Tag - DEV.Options(CmDEVitem.Tag).ModeIndex = i + DEV.Options(CmDEVitem.Tag).ModeIndex = i - UpdateDEVconfigs(CmDEVitem) - End Sub + UpdateDEVconfigs(CmDEVitem) + End Sub #End Region - 'Add message to message list - Public Sub MSGtoForm(ByVal ID As tMsgID, ByVal Msg As String, ByVal Source As String, ByVal Link As String) - - Dim lv0 As ListViewItem - - lv0 = New ListViewItem - lv0.Text = Msg - lv0.SubItems.Add(Now.ToString) - lv0.SubItems.Add(Source) - - If LvMsg.Items.Count > 9999 Then LvMsg.Items.RemoveAt(0) - - LogFile.WriteToLog(ID, Msg & vbTab & Source) - - Select Case ID - - Case tMsgID.Err - - lv0.BackColor = Color.Red - lv0.ForeColor = Color.White - - Case tMsgID.Warn - - lv0.BackColor = Color.Khaki 'FromArgb(218, 125, 0) 'DarkOrange - lv0.ForeColor = Color.Black - - Case Else - - If ID = tMsgID.NewJob Then - lv0.BackColor = Color.LightGray - lv0.ForeColor = Color.DarkBlue - End If - - End Select - - If Link <> "" Then - If Not ID = tMsgID.Err Then lv0.ForeColor = Color.Blue - lv0.SubItems(0).Font = New Font(Me.LvMsg.Font, FontStyle.Underline) - lv0.Tag = Link - End If - - - LvMsg.Items.Add(lv0) - - lv0.EnsureVisible() - End Sub - - - 'Open link in message list - Private Sub LvMsg_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles LvMsg.MouseClick - Dim txt As String - If Me.LvMsg.SelectedIndices.Count > 0 Then - If Not Me.LvMsg.SelectedItems(0).Tag Is Nothing Then - If _ - Len(CStr(Me.LvMsg.SelectedItems(0).Tag)) > 4 AndAlso - Microsoft.VisualBasic.Left(CStr(Me.LvMsg.SelectedItems(0).Tag), 4) = "<UM>" Then - txt = CStr(Me.LvMsg.SelectedItems(0).Tag).Replace("<UM>", MyAppPath & "User Manual") - txt = txt.Replace(" ", "%20") - txt = txt.Replace("\", "/") - txt = "file:///" & txt - Try - System.Diagnostics.Process.Start(txt) - Catch ex As Exception - MsgBox("Cannot open link! (-_-;)") - End Try - ElseIf _ - Len(CStr(Me.LvMsg.SelectedItems(0).Tag)) > 5 AndAlso - Microsoft.VisualBasic.Left(CStr(Me.LvMsg.SelectedItems(0).Tag), 5) = "<GUI>" Then - txt = CStr(Me.LvMsg.SelectedItems(0).Tag).Replace("<GUI>", "") - OpenVectoFile(txt) - ElseIf _ - Len(CStr(Me.LvMsg.SelectedItems(0).Tag)) > 5 AndAlso - Microsoft.VisualBasic.Left(CStr(Me.LvMsg.SelectedItems(0).Tag), 5) = "<RUN>" Then - txt = CStr(Me.LvMsg.SelectedItems(0).Tag).Replace("<RUN>", "") - Try - Process.Start(txt) - Catch ex As Exception - GUImsg(tMsgID.Err, "Could not run '" & txt & "'!") - End Try - Else - OpenFiles(CStr(Me.LvMsg.SelectedItems(0).Tag)) - End If - End If - End If - End Sub - - 'Link-cursor (Hand) for links - Private Sub LvMsg_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles LvMsg.MouseMove - Dim lv0 As ListViewItem - lv0 = Me.LvMsg.GetItemAt(e.Location.X, e.Location.Y) - If lv0 Is Nothing OrElse lv0.Tag Is Nothing Then - LvMsg.Cursor = Cursors.Arrow - Else - LvMsg.Cursor = Cursors.Hand - End If - If mouseDownOnListView Then - Try - LvMsg.HitTest(e.Location).Item.Selected = True - Catch - End Try - End If - End Sub + 'Add message to message list + Public Sub MSGtoForm(ByVal ID As tMsgID, ByVal Msg As String, ByVal Source As String, ByVal Link As String) + + Dim lv0 As ListViewItem + + lv0 = New ListViewItem + lv0.Text = Msg + lv0.SubItems.Add(Now.ToString) + lv0.SubItems.Add(Source) + + If LvMsg.Items.Count > 9999 Then LvMsg.Items.RemoveAt(0) + + LogFile.WriteToLog(ID, Msg & vbTab & Source) + + Select Case ID + + Case tMsgID.Err + + lv0.BackColor = Color.Red + lv0.ForeColor = Color.White + + Case tMsgID.Warn + + lv0.BackColor = Color.Khaki 'FromArgb(218, 125, 0) 'DarkOrange + lv0.ForeColor = Color.Black + + Case Else + + If ID = tMsgID.NewJob Then + lv0.BackColor = Color.LightGray + lv0.ForeColor = Color.DarkBlue + End If + + End Select + + If Link <> "" Then + If Not ID = tMsgID.Err Then lv0.ForeColor = Color.Blue + lv0.SubItems(0).Font = New Font(Me.LvMsg.Font, FontStyle.Underline) + lv0.Tag = Link + End If + + + LvMsg.Items.Add(lv0) + + lv0.EnsureVisible() + End Sub + + + 'Open link in message list + Private Sub LvMsg_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles LvMsg.MouseClick + Dim txt As String + If Me.LvMsg.SelectedIndices.Count > 0 Then + If Not Me.LvMsg.SelectedItems(0).Tag Is Nothing Then + If _ + Len(CStr(Me.LvMsg.SelectedItems(0).Tag)) > 4 AndAlso + Microsoft.VisualBasic.Left(CStr(Me.LvMsg.SelectedItems(0).Tag), 4) = "<UM>" Then + txt = CStr(Me.LvMsg.SelectedItems(0).Tag).Replace("<UM>", MyAppPath & "User Manual") + txt = txt.Replace(" ", "%20") + txt = txt.Replace("\", "/") + txt = "file:///" & txt + Try + System.Diagnostics.Process.Start(txt) + Catch ex As Exception + MsgBox("Cannot open link! (-_-;)") + End Try + ElseIf _ + Len(CStr(Me.LvMsg.SelectedItems(0).Tag)) > 5 AndAlso + Microsoft.VisualBasic.Left(CStr(Me.LvMsg.SelectedItems(0).Tag), 5) = "<GUI>" Then + txt = CStr(Me.LvMsg.SelectedItems(0).Tag).Replace("<GUI>", "") + OpenVectoFile(txt) + ElseIf _ + Len(CStr(Me.LvMsg.SelectedItems(0).Tag)) > 5 AndAlso + Microsoft.VisualBasic.Left(CStr(Me.LvMsg.SelectedItems(0).Tag), 5) = "<RUN>" Then + txt = CStr(Me.LvMsg.SelectedItems(0).Tag).Replace("<RUN>", "") + Try + Process.Start(txt) + Catch ex As Exception + GUImsg(tMsgID.Err, "Could not run '" & txt & "'!") + End Try + Else + OpenFiles(CStr(Me.LvMsg.SelectedItems(0).Tag)) + End If + End If + End If + End Sub + + 'Link-cursor (Hand) for links + Private Sub LvMsg_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles LvMsg.MouseMove + Dim lv0 As ListViewItem + lv0 = Me.LvMsg.GetItemAt(e.Location.X, e.Location.Y) + If lv0 Is Nothing OrElse lv0.Tag Is Nothing Then + LvMsg.Cursor = Cursors.Arrow + Else + LvMsg.Cursor = Cursors.Hand + End If + If mouseDownOnListView Then + Try + LvMsg.HitTest(e.Location).Item.Selected = True + Catch + End Try + End If + End Sub #Region "Open File Context Menu" - Private CmFiles As String() + Private CmFiles As String() - 'Initialise and open context menu - Private Sub OpenFiles(ParamArray files() As String) + 'Initialise and open context menu + Private Sub OpenFiles(ParamArray files() As String) - If files.Length = 0 Then Exit Sub + If files.Length = 0 Then Exit Sub - CmFiles = files + CmFiles = files - Me.OpenInGraphWindowToolStripMenuItem.Enabled = (UCase(fEXT(CmFiles(0))) = ".VMOD") + Me.OpenInGraphWindowToolStripMenuItem.Enabled = (UCase(fEXT(CmFiles(0))) = ".VMOD") - OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName + OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName - CmOpenFile.Show(Cursor.Position) - End Sub + CmOpenFile.Show(Cursor.Position) + End Sub - 'Open with tool defined in Settings - Private Sub OpenWithToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles OpenWithToolStripMenuItem.Click - If Not FileOpenAlt(CmFiles(0)) Then MsgBox("Failed to open file!") - End Sub + 'Open with tool defined in Settings + Private Sub OpenWithToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles OpenWithToolStripMenuItem.Click + If Not FileOpenAlt(CmFiles(0)) Then MsgBox("Failed to open file!") + End Sub - Private Sub OpenInGraphWindowToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles OpenInGraphWindowToolStripMenuItem.Click - Dim FGraph As New F_Graph - FGraph.Show() - FGraph.LoadNewFile(CmFiles(0)) - End Sub + Private Sub OpenInGraphWindowToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles OpenInGraphWindowToolStripMenuItem.Click + Dim FGraph As New F_Graph + FGraph.Show() + FGraph.LoadNewFile(CmFiles(0)) + End Sub - 'Show in folder - Private Sub ShowInFolderToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ - Handles ShowInFolderToolStripMenuItem.Click - If IO.File.Exists(CmFiles(0)) Then - Try - System.Diagnostics.Process.Start("explorer", "/select,""" & CmFiles(0) & "") - Catch ex As Exception - MsgBox("Failed to open file!") - End Try - Else - MsgBox("File not found!") - End If - End Sub + 'Show in folder + Private Sub ShowInFolderToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) _ + Handles ShowInFolderToolStripMenuItem.Click + If IO.File.Exists(CmFiles(0)) Then + Try + System.Diagnostics.Process.Start("explorer", "/select,""" & CmFiles(0) & "") + Catch ex As Exception + MsgBox("Failed to open file!") + End Try + Else + MsgBox("File not found!") + End If + End Sub #End Region - 'Change Declaraion Mode - Private Sub RbDecl_CheckedChanged(sender As Object, e As System.EventArgs) Handles RbDecl.CheckedChanged - If CbDeclLock Then Exit Sub + 'Change Declaraion Mode + Private Sub RbDecl_CheckedChanged(sender As Object, e As System.EventArgs) Handles RbDecl.CheckedChanged + If CbDeclLock Then Exit Sub - If F_VECTO.Visible Or F_VEH.Visible Or F_GBX.Visible Or F_ENG.Visible Then - CbDeclLock = True - Me.RbDecl.Checked = Not Me.RbDecl.Checked - CbDeclLock = False - MsgBox("Please close all dialog windows (e.g. Job Editor) before changing mode!") - Else - Cfg.DeclMode = Me.RbDecl.Checked - Me.RbDev.Checked = Not Me.RbDecl.Checked - DeclOnOff() - End If - End Sub + If F_VECTO.Visible Or F_VEH.Visible Or F_GBX.Visible Or F_ENG.Visible Then + CbDeclLock = True + Me.RbDecl.Checked = Not Me.RbDecl.Checked + CbDeclLock = False + MsgBox("Please close all dialog windows (e.g. Job Editor) before changing mode!") + Else + Cfg.DeclMode = Me.RbDecl.Checked + Me.RbDev.Checked = Not Me.RbDecl.Checked + DeclOnOff() + End If + End Sub #Region "GUI Tests" - Private GUItest0 As New GUItest(Me) - Private mouseDownOnListView As Boolean - - Private Class GUItest - Private RowLim As Int16 = 9 - Private ColLim As Int16 = 45 - Public TestActive As Boolean = False - Private TestAborted As Boolean - Private xCtrl As Int16 - Private xPanel As Int16 - Private Scr As Int32 - Private PRbAlt As Boolean - Private Ctrls(RowLim + 1) As Int16 - Private Pnls(RowLim + 1) As Int16 - Private CtrlC As Int16 - Private CtrlCL As Int16 - Private PnDir As Int16 - Private PnDirC As Int16 - Private PnDirCL As Int16 - Private PnDirRnd As Int16 - Private CtrlRnd As Int16 - Private DiffC As Int16 - Private DiffLvl As Int16 - Private bInit As Int16 - Private MyForm As F_MAINForm - Private KeyCode As List(Of Integer) - - Private Sub TestRun() - - Dim z As Int16 - - xPanel = ColLim - 10 - xCtrl = ColLim - 10 - PRbAlt = False - Scr = 0 - PnDir = 0 - PnDirCL = 10 - PnDirC = 0 ' StrDirCL - CtrlCL = 5 - CtrlC = CtrlCL - PnDirRnd = 5 - CtrlRnd = 8 - DiffC = 0 - DiffLvl = 1 - bInit = 0 - TestAborted = False - Randomize() - - - MyForm.LvMsg.Items.Clear() - MyForm.ToolStripLbStatus.Text = "Score: 0000 Press <Esc> to Quit" - - For z = 1 To RowLim - 6 - PRbAlt = Not PRbAlt - If Not PRbAlt Then - MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") - Else - MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") - End If - Next - - PRbAlt = False - - MyForm.LvMsg.Items.Add(" VECTO Interactive Mode" & Space(ColLim - 35) & "*| |*") - MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") - MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") - MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") - MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") - MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| ∆ |*") - - For z = 1 To RowLim + 1 - Pnls(z) = ColLim - 10 - Ctrls(z) = 0 - Next - - MyForm.TmProgSec.Interval = 200 - - MyForm.LvMsg.Focus() - - MyForm.TmProgSec.Start() - End Sub - - Public Sub TestStop() - MyForm.TmProgSec.Stop() - TestActive = False - MyForm.LvMsg.Items.Clear() - CtrlC = 0 - MyForm.ToolStripLbStatus.Text = MyForm.LastModeName & " Mode" - End Sub - - Public Sub TestTick() - - If bInit = 24 Then GoTo LbRace - bInit += 1 - - Select Case bInit - Case 10 - MyForm.LvMsg.Items.RemoveAt(RowLim - 6) - MyForm.LvMsg.Items.RemoveAt(RowLim - 5) - MyForm.LvMsg.Items.Insert(RowLim - 6, Space(ColLim - 11) & "*| |*") - MyForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " 3 " & Space(10) & "*| |*") - Case 14 - MyForm.LvMsg.Items.RemoveAt(RowLim - 4) - MyForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " 2 " & Space(10) & "*| |*") - Case 18 - MyForm.LvMsg.Items.RemoveAt(RowLim - 4) - MyForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " 1 " & Space(10) & "*| |*") - Case 22 - MyForm.LvMsg.Items.RemoveAt(RowLim - 4) - MyForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " Go! " & Space(10) & "*| |*") - Case 24 - MyForm.LvMsg.Items.RemoveAt(RowLim - 4) - MyForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " " & Space(10) & "*| |*") - End Select - Exit Sub + Private GUItest0 As New GUItest(Me) + Private mouseDownOnListView As Boolean + + Private Class GUItest + Private RowLim As Int16 = 9 + Private ColLim As Int16 = 45 + Public TestActive As Boolean = False + Private TestAborted As Boolean + Private xCtrl As Int16 + Private xPanel As Int16 + Private Scr As Int32 + Private PRbAlt As Boolean + Private Ctrls(RowLim + 1) As Int16 + Private Pnls(RowLim + 1) As Int16 + Private CtrlC As Int16 + Private CtrlCL As Int16 + Private PnDir As Int16 + Private PnDirC As Int16 + Private PnDirCL As Int16 + Private PnDirRnd As Int16 + Private CtrlRnd As Int16 + Private DiffC As Int16 + Private DiffLvl As Int16 + Private bInit As Int16 + Private MyForm As F_MAINForm + Private KeyCode As List(Of Integer) + + Private Sub TestRun() + + Dim z As Int16 + + xPanel = ColLim - 10 + xCtrl = ColLim - 10 + PRbAlt = False + Scr = 0 + PnDir = 0 + PnDirCL = 10 + PnDirC = 0 ' StrDirCL + CtrlCL = 5 + CtrlC = CtrlCL + PnDirRnd = 5 + CtrlRnd = 8 + DiffC = 0 + DiffLvl = 1 + bInit = 0 + TestAborted = False + Randomize() + + + MyForm.LvMsg.Items.Clear() + MyForm.ToolStripLbStatus.Text = "Score: 0000 Press <Esc> to Quit" + + For z = 1 To RowLim - 6 + PRbAlt = Not PRbAlt + If Not PRbAlt Then + MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") + Else + MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") + End If + Next + + PRbAlt = False + + MyForm.LvMsg.Items.Add(" VECTO Interactive Mode" & Space(ColLim - 35) & "*| |*") + MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") + MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") + MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| | |*") + MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| |*") + MyForm.LvMsg.Items.Add(Space(ColLim - 11) & "*| ∆ |*") + + For z = 1 To RowLim + 1 + Pnls(z) = ColLim - 10 + Ctrls(z) = 0 + Next + + MyForm.TmProgSec.Interval = 200 + + MyForm.LvMsg.Focus() + + MyForm.TmProgSec.Start() + End Sub + + Public Sub TestStop() + MyForm.TmProgSec.Stop() + TestActive = False + MyForm.LvMsg.Items.Clear() + CtrlC = 0 + MyForm.ToolStripLbStatus.Text = MyForm.LastModeName & " Mode" + End Sub + + Public Sub TestTick() + + If bInit = 24 Then GoTo LbRace + bInit += 1 + + Select Case bInit + Case 10 + MyForm.LvMsg.Items.RemoveAt(RowLim - 6) + MyForm.LvMsg.Items.RemoveAt(RowLim - 5) + MyForm.LvMsg.Items.Insert(RowLim - 6, Space(ColLim - 11) & "*| |*") + MyForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " 3 " & Space(10) & "*| |*") + Case 14 + MyForm.LvMsg.Items.RemoveAt(RowLim - 4) + MyForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " 2 " & Space(10) & "*| |*") + Case 18 + MyForm.LvMsg.Items.RemoveAt(RowLim - 4) + MyForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " 1 " & Space(10) & "*| |*") + Case 22 + MyForm.LvMsg.Items.RemoveAt(RowLim - 4) + MyForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " Go! " & Space(10) & "*| |*") + Case 24 + MyForm.LvMsg.Items.RemoveAt(RowLim - 4) + MyForm.LvMsg.Items.Insert(RowLim - 4, Space(ColLim - 30) & " " & Space(10) & "*| |*") + End Select + Exit Sub LbRace: - PRbAlt = Not PRbAlt - - MyForm.LvMsg.BeginUpdate() - - sLists() + PRbAlt = Not PRbAlt + + MyForm.LvMsg.BeginUpdate() + + sLists() - sAlign() + sAlign() - sSetCtrl() + sSetCtrl() - sSetPanel() + sSetPanel() - MyForm.LvMsg.Items.RemoveAt(RowLim) + MyForm.LvMsg.Items.RemoveAt(RowLim) - sUpdateCtrl() + sUpdateCtrl() - MyForm.LvMsg.EndUpdate() + MyForm.LvMsg.EndUpdate() - If Math.Abs(xCtrl - Pnls(2)) > 4 Then - sAbort() - Exit Sub - ElseIf Ctrls(2) <> 0 Then - If xCtrl = Pnls(2) + Ctrls(2) - 4 Then - sAbort() - Exit Sub - End If - Scr += 5 * DiffLvl - End If - - Scr += DiffLvl - DiffC += 1 - - 'Erhöhe Schwierigkeitsgrad - If DiffC = (DiffLvl + 3) * 4 Then - DiffC = 0 - DiffLvl += 1 - If DiffLvl > 2 And DiffLvl < 7 Then MyForm.TmProgSec.Interval = 300 - (DiffLvl) * 30 - Scr += 100 - Select Case DiffLvl - Case 3 - PnDirCL = 3 - CtrlCL = 4 - CtrlRnd = 6 - Case 5 - PnDirCL = 2 - PnDirRnd = 4 - Case 8 - CtrlCL = 2 - Case 10 - CtrlRnd = 4 - PnDirRnd = 3 - End Select - End If - End Sub - - Public Sub TestKey(ByVal Key0 As Integer) - - If TestActive Then - Select Case Key0 - Case Keys.Left - xCtrl -= 1 - sUpdateCtrl() - Case Keys.Right - xCtrl += 1 - sUpdateCtrl() - Case Keys.Escape - TestStop() - End Select - Else - - If KeyCode(CtrlC) = Key0 Then - CtrlC += 1 - If CtrlC = KeyCode.Count Then - TestActive = True - TestRun() - End If - Else - CtrlC = 0 - End If - - End If - End Sub - - Private Sub sAbort() - - Dim s As String, s1 As String - - If TestAborted Then Exit Sub - - TestAborted = True - - MyForm.TmProgSec.Stop() - - MyForm.LvMsg.BeginUpdate() - - s = MyForm.LvMsg.Items(0).Text - MyForm.LvMsg.Items.RemoveAt(0) - MyForm.LvMsg.Items.Insert(0, "You crashed!" & Microsoft.VisualBasic.Right(s, Len(s) - 12)) - - s = MyForm.LvMsg.Items(1).Text - s1 = "Score: " & Scr & " " - MyForm.LvMsg.Items.RemoveAt(1) - MyForm.LvMsg.Items.Insert(1, s1 & Microsoft.VisualBasic.Right(s, Len(s) - Len(s1))) - - MyForm.LvMsg.EndUpdate() - - LogFile.WriteToLog(tMsgID.Normal, "*** Race Score: " & Scr.ToString("0000") & " ***") - - CtrlC = 0 - TestActive = False - - MyForm.ToolStripLbStatus.Text = MyForm.LastModeName & " Mode" - End Sub - - Private Sub sSetCtrl() - Dim x As Int16 - If Scr < 10 Then Exit Sub - Ctrls(RowLim + 1) = 0 - CtrlC += 1 - If CtrlC < CtrlCL Then Exit Sub - Select Case CInt(Int((CtrlRnd * Rnd()) + 1)) - Case 1, 2 - CtrlC = 0 - x = CInt(Int((7 * Rnd()) + 1)) - Ctrls(RowLim + 1) = x - Case Else - End Select - End Sub - - Private Sub sUpdateCtrl() - Dim s As String - If bInit < 21 Then - xCtrl = ColLim - 10 - Exit Sub - End If - If Math.Abs(xCtrl - Pnls(1)) > 5 Then - sAbort() - Exit Sub - End If - s = Replace(MyForm.LvMsg.Items(RowLim - 1).Text.ToString, "∆", " ") & " " - s = Microsoft.VisualBasic.Left(s, ColLim + 15) - 's = s.Remove(0, 20) - 's = "Press <Esc> to Quit " & s - If Mid(s, xCtrl + 5, 1) = "X" Then - sAbort() - Exit Sub - End If - s = s.Remove(xCtrl + 4, 1) - 's = Trim(s.Insert(xCar + 4, "∆")) & Space(ColLim + 5 - Streets(2)) & "Pts: " & Pts & " Lv: " & DiffLvl - s = Space(Pnls(2) - 1) & Trim(s.Insert(xCtrl + 4, "∆")) - MyForm.LvMsg.Items.RemoveAt(RowLim - 1) - MyForm.LvMsg.Items.Insert(RowLim - 1, s) - MyForm.ToolStripLbStatus.Text = "Score: " & Scr.ToString("0000") & " Press <Esc> to Quit" - End Sub - - Private Sub sSetPanel() - Dim s As String - s = "*| | |*" - If PRbAlt Then - s = s.Remove(5, 1) - s = s.Insert(5, " ") - End If - If Ctrls(RowLim + 1) <> 0 Then - s = s.Remove(Ctrls(RowLim + 1) + 1, 1) - s = s.Insert(Ctrls(RowLim + 1) + 1, "X") - End If - Select Case xPanel - Pnls(RowLim) - Case -1 - s = Replace(s, "|", "\") - Case 1 - s = Replace(s, "|", "/") - End Select - MyForm.LvMsg.Items.Insert(0, Space(xPanel - 1) & s) - End Sub - - Private Sub sAlign() - PnDirC += 1 - If PnDirC < PnDirCL Then GoTo Lb1 - PnDirC = 0 - Select Case CInt(Int((PnDirRnd * Rnd()) + 1)) - Case 1 - PnDir = 1 - Case 2 - PnDir = -1 - Case Else - PnDir = 0 - End Select + If Math.Abs(xCtrl - Pnls(2)) > 4 Then + sAbort() + Exit Sub + ElseIf Ctrls(2) <> 0 Then + If xCtrl = Pnls(2) + Ctrls(2) - 4 Then + sAbort() + Exit Sub + End If + Scr += 5 * DiffLvl + End If + + Scr += DiffLvl + DiffC += 1 + + 'Erhöhe Schwierigkeitsgrad + If DiffC = (DiffLvl + 3) * 4 Then + DiffC = 0 + DiffLvl += 1 + If DiffLvl > 2 And DiffLvl < 7 Then MyForm.TmProgSec.Interval = 300 - (DiffLvl) * 30 + Scr += 100 + Select Case DiffLvl + Case 3 + PnDirCL = 3 + CtrlCL = 4 + CtrlRnd = 6 + Case 5 + PnDirCL = 2 + PnDirRnd = 4 + Case 8 + CtrlCL = 2 + Case 10 + CtrlRnd = 4 + PnDirRnd = 3 + End Select + End If + End Sub + + Public Sub TestKey(ByVal Key0 As Integer) + + If TestActive Then + Select Case Key0 + Case Keys.Left + xCtrl -= 1 + sUpdateCtrl() + Case Keys.Right + xCtrl += 1 + sUpdateCtrl() + Case Keys.Escape + TestStop() + End Select + Else + + If KeyCode(CtrlC) = Key0 Then + CtrlC += 1 + If CtrlC = KeyCode.Count Then + TestActive = True + TestRun() + End If + Else + CtrlC = 0 + End If + + End If + End Sub + + Private Sub sAbort() + + Dim s As String, s1 As String + + If TestAborted Then Exit Sub + + TestAborted = True + + MyForm.TmProgSec.Stop() + + MyForm.LvMsg.BeginUpdate() + + s = MyForm.LvMsg.Items(0).Text + MyForm.LvMsg.Items.RemoveAt(0) + MyForm.LvMsg.Items.Insert(0, "You crashed!" & Microsoft.VisualBasic.Right(s, Len(s) - 12)) + + s = MyForm.LvMsg.Items(1).Text + s1 = "Score: " & Scr & " " + MyForm.LvMsg.Items.RemoveAt(1) + MyForm.LvMsg.Items.Insert(1, s1 & Microsoft.VisualBasic.Right(s, Len(s) - Len(s1))) + + MyForm.LvMsg.EndUpdate() + + LogFile.WriteToLog(tMsgID.Normal, "*** Race Score: " & Scr.ToString("0000") & " ***") + + CtrlC = 0 + TestActive = False + + MyForm.ToolStripLbStatus.Text = MyForm.LastModeName & " Mode" + End Sub + + Private Sub sSetCtrl() + Dim x As Int16 + If Scr < 10 Then Exit Sub + Ctrls(RowLim + 1) = 0 + CtrlC += 1 + If CtrlC < CtrlCL Then Exit Sub + Select Case CInt(Int((CtrlRnd * Rnd()) + 1)) + Case 1, 2 + CtrlC = 0 + x = CInt(Int((7 * Rnd()) + 1)) + Ctrls(RowLim + 1) = x + Case Else + End Select + End Sub + + Private Sub sUpdateCtrl() + Dim s As String + If bInit < 21 Then + xCtrl = ColLim - 10 + Exit Sub + End If + If Math.Abs(xCtrl - Pnls(1)) > 5 Then + sAbort() + Exit Sub + End If + s = Replace(MyForm.LvMsg.Items(RowLim - 1).Text.ToString, "∆", " ") & " " + s = Microsoft.VisualBasic.Left(s, ColLim + 15) + 's = s.Remove(0, 20) + 's = "Press <Esc> to Quit " & s + If Mid(s, xCtrl + 5, 1) = "X" Then + sAbort() + Exit Sub + End If + s = s.Remove(xCtrl + 4, 1) + 's = Trim(s.Insert(xCar + 4, "∆")) & Space(ColLim + 5 - Streets(2)) & "Pts: " & Pts & " Lv: " & DiffLvl + s = Space(Pnls(2) - 1) & Trim(s.Insert(xCtrl + 4, "∆")) + MyForm.LvMsg.Items.RemoveAt(RowLim - 1) + MyForm.LvMsg.Items.Insert(RowLim - 1, s) + MyForm.ToolStripLbStatus.Text = "Score: " & Scr.ToString("0000") & " Press <Esc> to Quit" + End Sub + + Private Sub sSetPanel() + Dim s As String + s = "*| | |*" + If PRbAlt Then + s = s.Remove(5, 1) + s = s.Insert(5, " ") + End If + If Ctrls(RowLim + 1) <> 0 Then + s = s.Remove(Ctrls(RowLim + 1) + 1, 1) + s = s.Insert(Ctrls(RowLim + 1) + 1, "X") + End If + Select Case xPanel - Pnls(RowLim) + Case -1 + s = Replace(s, "|", "\") + Case 1 + s = Replace(s, "|", "/") + End Select + MyForm.LvMsg.Items.Insert(0, Space(xPanel - 1) & s) + End Sub + + Private Sub sAlign() + PnDirC += 1 + If PnDirC < PnDirCL Then GoTo Lb1 + PnDirC = 0 + Select Case CInt(Int((PnDirRnd * Rnd()) + 1)) + Case 1 + PnDir = 1 + Case 2 + PnDir = -1 + Case Else + PnDir = 0 + End Select Lb1: - xPanel += PnDir - If xPanel > ColLim Then - xPanel = ColLim - ElseIf xPanel < 22 Then - xPanel = 22 - End If - Pnls(RowLim + 1) = xPanel - End Sub - - Private Sub sLists() - Dim x As Int16 - For x = 2 To RowLim + 1 - Ctrls(x - 1) = Ctrls(x) - Pnls(x - 1) = Pnls(x) - Next - End Sub - - Public Sub New(ByVal Form As F_MAINForm) - MyForm = Form - KeyCode = New List(Of Integer) - KeyCode.Add(Keys.Up) - KeyCode.Add(Keys.Up) - KeyCode.Add(Keys.Down) - KeyCode.Add(Keys.Down) - KeyCode.Add(Keys.Left) - KeyCode.Add(Keys.Right) - KeyCode.Add(Keys.Left) - KeyCode.Add(Keys.Right) - KeyCode.Add(Keys.B) - KeyCode.Add(Keys.A) - CtrlC = 0 - End Sub - End Class - - Private Sub LvMsg_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles LvMsg.KeyDown - GUItest0.TestKey(e.KeyValue) - If GUItest0.TestActive Then e.SuppressKeyPress = True - End Sub - - Private Sub LvMsg_LostFocus(sender As Object, e As System.EventArgs) Handles LvMsg.LostFocus - If GUItest0.TestActive Then GUItest0.TestStop() - End Sub + xPanel += PnDir + If xPanel > ColLim Then + xPanel = ColLim + ElseIf xPanel < 22 Then + xPanel = 22 + End If + Pnls(RowLim + 1) = xPanel + End Sub + + Private Sub sLists() + Dim x As Int16 + For x = 2 To RowLim + 1 + Ctrls(x - 1) = Ctrls(x) + Pnls(x - 1) = Pnls(x) + Next + End Sub + + Public Sub New(ByVal Form As F_MAINForm) + MyForm = Form + KeyCode = New List(Of Integer) + KeyCode.Add(Keys.Up) + KeyCode.Add(Keys.Up) + KeyCode.Add(Keys.Down) + KeyCode.Add(Keys.Down) + KeyCode.Add(Keys.Left) + KeyCode.Add(Keys.Right) + KeyCode.Add(Keys.Left) + KeyCode.Add(Keys.Right) + KeyCode.Add(Keys.B) + KeyCode.Add(Keys.A) + CtrlC = 0 + End Sub + End Class + + Private Sub LvMsg_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles LvMsg.KeyDown + GUItest0.TestKey(e.KeyValue) + If GUItest0.TestActive Then e.SuppressKeyPress = True + End Sub + + Private Sub LvMsg_LostFocus(sender As Object, e As System.EventArgs) Handles LvMsg.LostFocus + If GUItest0.TestActive Then GUItest0.TestStop() + End Sub #End Region - Private Sub LvMsg_KeyUp(sender As Object, e As KeyEventArgs) Handles LvMsg.KeyUp - If (e.Control And e.KeyCode = Keys.C) Then - Dim builder As StringBuilder = New StringBuilder() - For Each selectedItem As ListViewItem In LvMsg.SelectedItems - builder.AppendLine(String.Join(", ", - selectedItem.SubItems.Cast(Of ListViewItem.ListViewSubItem).Select( - Function(item) item.Text))) - Next - Clipboard.SetText(builder.ToString()) - End If - End Sub - - Private Sub LvMsg_MouseDown(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseDown - mouseDownOnListView = True - End Sub - - Private Sub LvMsg_MouseUp(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseUp - mouseDownOnListView = False - End Sub + Private Sub LvMsg_KeyUp(sender As Object, e As KeyEventArgs) Handles LvMsg.KeyUp + If (e.Control And e.KeyCode = Keys.C) Then + Dim builder As StringBuilder = New StringBuilder() + For Each selectedItem As ListViewItem In LvMsg.SelectedItems + builder.AppendLine(String.Join(", ", + selectedItem.SubItems.Cast(Of ListViewItem.ListViewSubItem).Select( + Function(item) item.Text))) + Next + Clipboard.SetText(builder.ToString()) + End If + End Sub + + Private Sub LvMsg_MouseDown(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseDown + mouseDownOnListView = True + End Sub + + Private Sub LvMsg_MouseUp(sender As Object, e As MouseEventArgs) Handles LvMsg.MouseUp + mouseDownOnListView = False + End Sub End Class diff --git a/VECTO/VECTO.vbproj b/VECTO/VECTO.vbproj index a9571f554b6fe0932e2af32e2c4fcd0a35c3325e..c73cf190a755085a25dc90e74b2a57bb5e74a176 100644 --- a/VECTO/VECTO.vbproj +++ b/VECTO/VECTO.vbproj @@ -94,6 +94,10 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference> + <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\NLog.4.2.0\lib\net45\NLog.dll</HintPath> + </Reference> <Reference Include="System" /> <Reference Include="System.Data" /> <Reference Include="System.Deployment" /> diff --git a/VECTO/packages.config b/VECTO/packages.config index 855ebacf55e34b7ed41a371539b0d14670e51095..888cc0edb57df6f9a8e05add491a3ceabf8de337 100644 --- a/VECTO/packages.config +++ b/VECTO/packages.config @@ -2,4 +2,5 @@ <packages> <package id="iTextSharp" version="5.5.7" targetFramework="net45" /> <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" /> + <package id="NLog" version="4.2.0" targetFramework="net45" /> </packages> \ No newline at end of file diff --git a/VectoConsole/Program.cs b/VectoConsole/Program.cs index c61577eb66a9ee8ff0c943c3208fefe4f67a75f9..689024435462ae2a4060cdc6fb3de8c958c8e55c 100644 --- a/VectoConsole/Program.cs +++ b/VectoConsole/Program.cs @@ -38,6 +38,7 @@ using System.Reflection; using System.Threading; using NLog; using NLog.Config; +using NLog.Targets; using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.FileIO.JSON; using TUGraz.VectoCore.Models.Simulation.Impl; @@ -48,6 +49,8 @@ namespace VectoConsole { internal static class Program { + public static List<string> WarningMessages = new List<string>(); + private static int _numLines; private static int ProgessCounter { get; set; } @@ -119,9 +122,21 @@ Examples: } var config = LogManager.Configuration; - //config.LoggingRules.Add(new LoggingRule("*", logLevel, config.FindTargetByName("ConsoleLogger"))); config.LoggingRules.Add(new LoggingRule("*", logLevel, config.FindTargetByName("LogFile"))); + + if (logLevel > LogLevel.Warn) { + var methodCallTarget = new MethodCallTarget { + ClassName = "VectoConsole.Program, vectocmd", + MethodName = "LogWarning", + Name = "WarningLogger" + }; + methodCallTarget.Parameters.Add(new MethodCallParameter("${level}")); + methodCallTarget.Parameters.Add(new MethodCallParameter("${message}")); + config.LoggingRules.Add(new LoggingRule("*", LogLevel.Warn, methodCallTarget)); + } LogManager.Configuration = config; + + // todo mk 2016-03-02: trace listener still needed? Trace.Listeners.Add(new ConsoleTraceListener(true)); if (args.Contains("-V") || debugEnabled) { @@ -140,8 +155,6 @@ Examples: var timings = new Dictionary<string, double>(); // process the file list and start simulation - //var sumFileName = Path.Combine(Path.GetDirectoryName(fileList.First()) ?? "", - // Path.GetFileNameWithoutExtension(fileList.First()) + Constants.FileExtensions.SumFile); var fileWriter = new FileOutputWriter(fileList.First()); var sumWriter = new SummaryDataContainer(fileWriter); _jobContainer = new JobContainer(sumWriter); @@ -154,9 +167,19 @@ Examples: Console.ResetColor(); } - Console.WriteLine(@"Reading Job Files"); stopWatch.Start(); - foreach (var file in fileList.Where(f => Path.GetExtension(f) == Constants.FileExtensions.VectoJobFile)) { + + var jobFiles = fileList.Where(f => Path.GetExtension(f) == Constants.FileExtensions.VectoJobFile).ToList(); + + if (!jobFiles.Any()) { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(@"No Job files found. Please restart the application with a valid '.vecto' file."); + Console.ResetColor(); + return 1; + } + + foreach (var file in jobFiles) { + Console.WriteLine(@"Reading job: " + file); var dataProvider = JSONInputDataFactory.ReadJsonJob(file); var runsFactory = new SimulatorFactory(mode, dataProvider, fileWriter); @@ -170,7 +193,6 @@ Examples: Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(@"Detected cycles:"); Console.ResetColor(); - var cycles = _jobContainer.GetCycleTypes().ToList(); foreach (var cycle in _jobContainer.GetCycleTypes()) { Console.WriteLine(@" {0}: {1}", cycle.Name, cycle.CycleType); } @@ -188,6 +210,9 @@ Examples: } Console.ResetColor(); Console.WriteLine(); + + DisplayWarnings(); + Console.WriteLine(); stopWatch.Start(); _jobContainer.Execute(!debugEnabled); @@ -205,20 +230,48 @@ Examples: stopWatch.Stop(); timings.Add("Simulation runs", stopWatch.Elapsed.TotalMilliseconds); + PrintProgress(_jobContainer.GetProgress(), args.Contains("-t")); + if (args.Contains("-t")) { PrintTimings(timings); } + + DisplayWarnings(); } catch (Exception e) { - Console.Error.WriteLine(e.Message); Console.ForegroundColor = ConsoleColor.Red; - Console.Error.WriteLine("Please see log-file for further details (logs/log.txt)"); + Console.Error.WriteLine(e.Message); Console.ResetColor(); + + Console.Error.WriteLine("Please see log-file for further details (logs/log.txt)"); + Environment.ExitCode = Environment.ExitCode != 0 ? Environment.ExitCode : 1; } + + Console.ReadKey(); + return Environment.ExitCode; } + private static void DisplayWarnings() + { + if (WarningMessages.Any()) { + Console.ForegroundColor = ConsoleColor.Yellow; + foreach (var message in WarningMessages) { + Console.Error.WriteLine(message); + } + Console.ResetColor(); + } + WarningMessages.Clear(); + } + + public static void LogWarning(string level, string message) + { + if (level == "Warn") { + WarningMessages.Add(message); + } + } + private static void ShowVersionInformation() { var vectodll = AssemblyName.GetAssemblyName("VectoCore.dll"); @@ -253,7 +306,14 @@ Examples: var spinner = "/-\\|"[ProgessCounter++ % 4]; var bar = new string('#', (int)(sumProgress * 100.0 / 2)); Console.WriteLine(@" {2} [{1,-50}] [{0,7:P}]", sumProgress, bar, spinner); - _numLines++; + + if (WarningMessages.Any()){ + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(@"Warnings: {0,5}", WarningMessages.Count); + Console.ResetColor(); + } + + _numLines +=2; } private static void PrintTimings(Dictionary<string, double> timings) diff --git a/VectoCore/Models/Declaration/Segments.cs b/VectoCore/Models/Declaration/Segments.cs index a0e3c665f91e301b78539b0ff49757d91a9f90f4..883276d96e9f30df2bda6184183e0fd730364337 100644 --- a/VectoCore/Models/Declaration/Segments.cs +++ b/VectoCore/Models/Declaration/Segments.cs @@ -62,13 +62,22 @@ namespace TUGraz.VectoCore.Models.Declaration if (grossVehicleMassRating < 7.5.SI<Ton>()) { throw new VectoException("Gross vehicle mass must be greater than 7.5 tons"); } - var row = - SegmentTable.Rows.Cast<DataRow>().First(r => r.Field<string>("valid") == "1" - && r.Field<string>("vehiclecategory") == vehicleCategory.ToString() - && r.Field<string>("axleconf.") == axleConfiguration.GetName() - && r.ParseDouble("gvw_min").SI<Ton>() < grossVehicleMassRating - && r.ParseDouble("gvw_max").SI<Ton>() >= grossVehicleMassRating + + DataRow row; + try { + row = SegmentTable.Rows.Cast<DataRow>().First(r => r.Field<string>("valid") == "1" + && r.Field<string>("vehiclecategory") == vehicleCategory.ToString() + && r.Field<string>("axleconf.") == axleConfiguration.GetName() + && r.ParseDouble("gvw_min").SI<Ton>() < grossVehicleMassRating + && r.ParseDouble("gvw_max").SI<Ton>() >= grossVehicleMassRating ); + } catch (InvalidOperationException e) { + var errorMessage = string.Format( + "ERROR: Could not find the declaration segment for vehicle. Category: {0}, AxleConfiguration: {1}, GrossVehicleMassRating: {2}", + vehicleCategory, axleConfiguration.GetName(), grossVehicleMassRating); + Log.Fatal(errorMessage); + throw new VectoException(errorMessage, e); + } var segment = new Segment { GrossVehicleWeightMin = row.ParseDouble("gvw_min").SI().Ton.Cast<Kilogram>(), GrossVehicleWeightMax = row.ParseDouble("gvw_max").SI().Ton.Cast<Kilogram>(), diff --git a/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs b/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs index b7ccba0a97823a3cf42ee5a07f38cb0dbefe5297..099c8305031c1eae98e886cdb8b80988430ad190 100644 --- a/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs +++ b/VectoCore/Models/SimulationComponent/Impl/Vehicle.cs @@ -166,12 +166,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl container[ModalResultField.P_trac] = CurrentState.VehicleTractionForce * averageVelocity; // sanity check: is the vehicle in step with the cycle? if (container[ModalResultField.dist] == DBNull.Value) { - Log.Warn("distance field is not set!"); + Log.Warn("Distance field is not set!"); } else { var distance = (SI)container[ModalResultField.dist]; if (!distance.IsEqual(CurrentState.Distance, 1e-12.SI<Meter>())) { - Log.Warn("distance diverges: {0}, distance: {1}", (distance - CurrentState.Distance).Value(), - distance); + Log.Warn("Vehicle Distance diverges from Cycle by {0} [m]. Distance: {1}", (distance - CurrentState.Distance).Value(), distance); } } } diff --git a/VectoCore/Utils/EnumberableExtensionMethods.cs b/VectoCore/Utils/EnumberableExtensionMethods.cs index 01797e3320993105ea1e49c770e45d19adb64faa..11c8da334274d947d8550795526a4daf8e6b678c 100644 --- a/VectoCore/Utils/EnumberableExtensionMethods.cs +++ b/VectoCore/Utils/EnumberableExtensionMethods.cs @@ -135,7 +135,7 @@ namespace TUGraz.VectoCore.Utils if (!string.IsNullOrWhiteSpace(message)) { if (!skip(list[index]) || skip(list[index + 1])) { - LogManager.GetLogger(typeof(T).ToString()).Error(message); + LogManager.GetLogger(typeof(T).ToString()).Warn(message); } } diff --git a/VectoCoreTest/TestData/Jobs/24t Coach_smallLossMap.vecto b/VectoCoreTest/TestData/Jobs/24t Coach_smallLossMap.vecto deleted file mode 100644 index 912cc74f0c7f86b8483bf2fbe8a5903bc52922c9..0000000000000000000000000000000000000000 --- a/VectoCoreTest/TestData/Jobs/24t Coach_smallLossMap.vecto +++ /dev/null @@ -1,56 +0,0 @@ -{ - "Header": { - "CreatedBy": " ()", - "Date": "3/4/2015 2:09:13 PM", - "AppVersion": "2.0.4-beta3", - "FileVersion": 2 - }, - "Body": { - "SavedInDeclMode": false, - "VehicleFile": "../Components/24t Coach.vveh", - "EngineFile": "../Components/24t Coach.veng", - "GearboxFile": "../Components/24t Coach_smallLossMap.vgbx", - "Cycles": [ - "../Cycles/Coach_24t_xshort.vdri" - ], - "Aux": [ - { - "ID": "ALT1", - "Type": "Alternator", - "Path": "../Components/24t_Coach_ALT.vaux", - "Technology": "" - }, - { - "ID": "ALT2", - "Type": "Alternator", - "Path": "../Components/24t_Coach_ALT.vaux", - "Technology": "" - }, - { - "ID": "ALT3", - "Type": "Alternator", - "Path": "../Components/24t_Coach_ALT.vaux", - "Technology": "" - } - ], - "VACC": "../Components/Coach.vacc", - "EngineOnlyMode": false, - "StartStop": { - "Enabled": false, - "MaxSpeed": 5.0, - "MinTime": 0.0, - "Delay": 0 - }, - "LAC": { - "Enabled": true, - "Dec": -0.5, - "MinSpeed": 50.0 - }, - "OverSpeedEcoRoll": { - "Mode": "OverSpeed", - "MinSpeed": 70.0, - "OverSpeed": 5.0, - "UnderSpeed": 5.0 - } - } -} \ No newline at end of file