Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
F_MAINForm.vb 79 KiB
Newer Older
' Copyright 2014 European Union.
' Licensed under the EUPL (the 'Licence');
'
' * You may not use this work except in compliance with the Licence.
' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
' * Unless required by applicable law or agreed to in writing,
'   software distributed under the Licence is distributed on an "AS IS" basis,
'   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
'
' See the LICENSE.txt for the specific language governing permissions and limitations.
''' <summary>
''' Main application form. Loads at application start. Closing form ends application.
''' </summary>
''' <remarks></remarks>
Imports System.Collections.Generic

Public Class F_MAINForm

    Private JobListView As cFileListView
    Private CycleListView As cFileListView

    Private LastModeIndex As Int16
    Private LastModeName As String
    Private ConMenTarget As ListView
    Private ConMenTarJob As Boolean

    Private MODpath As String
    Private MODVehList As Int32()

    Private CycleTabPage As TabPage
    Private CycleTabPageVisible As Boolean

    Private ComLineShutDown As Boolean

    Private GUIlocked As Boolean

    Private CheckedItems As List(Of 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 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 Sub AllowSleepOFF()
#If Not PLATFORM = "x86" Then
        SetThreadExecutionState(tEXECUTION_STATE.ES_CONTINUOUS Or tEXECUTION_STATE.ES_SYSTEM_REQUIRED)
    End Sub

    Private Sub AllowSleepON()
#If Not PLATFORM = "x86" Then
        SetThreadExecutionState(tEXECUTION_STATE.ES_CONTINUOUS)
    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

#End Region

#Region "FileBrowser Init/Close"
    Private Sub FB_Initialize()
        FB_Init = False
        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()
#Region "VECTO-Worker"
    'VECTO-Launcher
    Public Sub VECTO_Launcher()
        Dim ProgOverall As Boolean
Raphael LUZ's avatar
Raphael LUZ committed
        Dim GEN0 As cVECTO
        'Called when VECTO already running
        If VECTOworker.IsBusy Then
            GUImsg(tMsgID.Err, "VECTO is already running!")
        'Delete GENlist-Selection
        Me.LvGEN.SelectedItems.Clear()

        Select Case LastModeIndex
            Case 0
                CalcMode = tCalcMode.ModeSTANDARD
                CalcMode = tCalcMode.ModeBATCH
        'If more than 100 calculations, ask whether to write by-second results
        If (CalcMode = tCalcMode.ModeBATCH) 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
        'Define Job-0list
        'Define File / Cycle list
        '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)
Raphael LUZ's avatar
Raphael LUZ committed
        If JobFileList.Count = 0 Then
            GUImsg(tMsgID.Err, "No job file selected!")
            Exit Sub
        End If

        'Check whether Overall-progbar is needed
        If CalcMode = tCalcMode.ModeBATCH Or JobFileList.Count > 1 Or Cfg.DeclMode Then
Raphael LUZ's avatar
Raphael LUZ committed
            ProgOverall = True
        Else
Raphael LUZ's avatar
Raphael LUZ committed
            GEN0 = New cVECTO
Raphael LUZ's avatar
Raphael LUZ committed
            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

        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))
    'Define cycle list (BATCH mode only)
    Private Sub SetCycleList()
        Dim LV0 As ListViewItem

        JobCycleList.Clear()

        If CalcMode = tCalcMode.ModeBATCH Then
            For Each LV0 In Me.LvDRI.CheckedItems
                JobCycleList.Add(fFileRepl(LV0.SubItems(0).Text))
    Private Sub Job_Launcher(ByVal ProgOverallEnabled As Boolean)

        If VECTOworker.IsBusy Then Exit Sub
        'Load Options from Options Tab
        Cfg.ConfigSAVE()

        If DEV.Enabled Then DEV.SaveToFile()

        'Reset Msg-output
        'Button switch
        Me.Button1.Text = "STOP"
        Me.Button1.Image = My.Resources.Stop_icon

        'Disable Options
        'ProgBars start
        If ProgOverallEnabled Then
            Me.ToolStripProgBarOverall.Value = 0
            Me.ToolStripProgBarOverall.Style = ProgressBarStyle.Marquee
            Me.ToolStripProgBarOverall.Visible = True
        End If

Raphael LUZ's avatar
Raphael LUZ committed
        ProgBarCtrl.ProgJobInt = 0
        '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()
#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

Raphael LUZ's avatar
Raphael LUZ committed
        e.Result = VECTO()


    '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())
        'Options enable / GUI reset
        LockGUI(False)
        Me.Button1.Enabled = True
        Me.Button1.Text = "START"
        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

#End Region

#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

        GUIlocked = False
        CheckLock = False
        GENcheckAllLock = False
        DRIcheckAllLock = False
        DRIchecked = 0
        GENchecked = 0

        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)

        LastModeIndex = 3
        LastModeName = ""

        ComLineShutDown = False

        FB_Initialize()

        Me.Text = "VECTO " & VECTOvers


        '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)
        '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
        'License check
        If 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 = 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 & " - Declaration Mode"
Raphael LUZ's avatar
Raphael LUZ committed
            Me.CBoxMODE.SelectedIndex = 0
            Cfg.DeclInit()
        Else
            Me.Text = "VECTO " & VECTOvers
        End If

        If Cfg.DeclMode Then
            LastModeName = "Declaration"
        Else
            Select Case LastModeIndex
                Case 0  'Standard
                    LastModeName = "STANDARD"
                Case 1  'Batch
                    LastModeName = "BATCH"
            End Select
        Status(LastModeName & " Mode")

        Me.LoadOptions()

        Me.LbDecl.Visible = Cfg.DeclMode

        Me.PnDeclOpt.Enabled = Not Cfg.DeclMode

    '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
Raphael LUZ's avatar
Raphael LUZ committed
        Dim fwelcome As F_Welcome
        'DEV Form
        If DEV.Enabled Then
            Me.TabControl1.TabPages.Insert(Me.TabControl1.TabPages.Count, DEVpage)
        End If

        'VECTO Init
Raphael LUZ's avatar
Raphael LUZ committed
        Declaration.Init()

        'Command Line Args
        If Command() <> "" Then
            CmdLineCtrl(My.Application.CommandLineArgs)
        Else
            If Cfg.FirstRun Then
                Cfg.FirstRun = False
Raphael LUZ's avatar
Raphael LUZ committed
                fwelcome = New F_Welcome
                fwelcome.ShowDialog()
    '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)
                    ComLineShutDown = True
                    bRUN = True
                Case Else
                    Select Case UCase(fEXT(str))
                        Case ".VECTO"
Raphael LUZ's avatar
Raphael LUZ committed
                            vecFiles.Add(fFileRepl(str))
Raphael LUZ's avatar
Raphael LUZ committed
                            driFiles.Add(fFileRepl(str))
Raphael LUZ's avatar
Raphael LUZ committed
                            ComFile = fFileRepl(str)
        'Mode switch and load Driving Cycles
        If bBATCH Then
            Me.CBoxMODE.SelectedIndex = 1

            If driFiles.Count > 0 Then
                LvDRI.Items.Clear()
                AddToCycleListView(driFiles.ToArray)
        Else
            Me.CBoxMODE.SelectedIndex = 0
        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)
        'Run or open file editor if file is specified
        If bRUN Then
            VECTO_Launcher()
        Else
            If ComFile <> sKey.NoFile Then OpenVectoFile(ComFile)
        End If
    Private Sub F01_MAINForm_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        'Save File-Lists
        'Close log
        LogFile.CloseLog()
        SetOptions()
        Cfg.ConfigSAVE()
        If DEV.Enabled Then DEV.SaveToFile()

        'File browser instances close
    'Open file - Job, vehicle, engine, gearbox or signature file
    Private Sub OpenVectoFile(ByVal File As String)
Raphael LUZ's avatar
Raphael LUZ committed

        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 = ""
Raphael LUZ's avatar
Raphael LUZ committed
                        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 = ""
Raphael LUZ's avatar
Raphael LUZ committed
                        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 = ""
Raphael LUZ's avatar
Raphael LUZ committed
                        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)
Raphael LUZ's avatar
Raphael LUZ committed
                Case ".VSIG"
                    OpenSigFile(File)
Raphael LUZ's avatar
Raphael LUZ committed
                Case Else
                    MsgBox("Type '" & fEXT(File) & "' unknown!", MsgBoxStyle.Critical)
            End Select

        End If

#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()
                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()
    '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() {""}

Raphael LUZ's avatar
Raphael LUZ committed
        'STANDARD/BATCH
        If fbVECTO.OpenDialog("", True, "vecto") Then
Raphael LUZ's avatar
Raphael LUZ committed
            Chck = True
            x = fbVECTO.Files

        If Chck Then AddToJobListView(x)
    '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)
    '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

        Me.LvGEN.EndUpdate()
        CheckLock = False
        '******************************************* End Update '*******************************************

        'Number update
        GENchecked = Me.LvGEN.CheckedItems.Count
        UpdateJobTabText()
    '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)
    '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 & ")"

        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

        GENcheckAllLock = False

    End Sub

#End Region

#Region "Cycle list (BATCH)"


#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()