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

Skip to content
Snippets Groups Projects
F_MAINForm.vb 69.5 KiB
Newer Older
Imports System.Collections.Generic

Public Class F_MAINForm

    Private GenList As cFileListView
    Private DriList As cFileListView
    Private BatchGenList As cFileListView

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

    Private MODpath As String
    Private MODVehList As Int32()

    Private DRIpage As TabPage
    Private DRIpageHere 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

#Region "SLEEP Steuerung"

    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 If
    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
        fbWorkDir = New cFileBrowser("WorkDir", True)
        fbFileLists = New cFileBrowser("FileLists")
        fbGEN = New cFileBrowser("gen")
        fbVEH = New cFileBrowser("vveh")
        fbMAP = New cFileBrowser("vmap")
        fbDRI = New cFileBrowser("vdri")
        fbFLD = New cFileBrowser("vfld")
        fbTRS = New cFileBrowser("trs")
        fbMAA = New cFileBrowser("maa")
        fbMAC = New cFileBrowser("mac")
        fbWUA = New cFileBrowser("wua")
        fbWUC = New cFileBrowser("wuc")
        fbCDW = New cFileBrowser("cdw")
        fbATC = New cFileBrowser("atc")
        fbBAT = New cFileBrowser("bat")
        fbEMO = New cFileBrowser("emo")
        fbEAN = New cFileBrowser("ean")
        fbGET = New cFileBrowser("get")
        fbSTE = New cFileBrowser("ste")
        fbEKF = New cFileBrowser("ekf")
        fbEXS = New cFileBrowser("exs")
        fbFZP = New cFileBrowser("fzp")
        fbFLT = New cFileBrowser("flt")
        fbTEM = New cFileBrowser("tem")
        fbSTR = New cFileBrowser("str")

        fbENG = New cFileBrowser("veng")
        fbWHTC = New cFileBrowser("vwhtc")
        fbGBX = New cFileBrowser("vgbx")
        fbACC = New cFileBrowser("vacc")
        fbAUX = New cFileBrowser("vaux")


        '-------------------------------------------------------
        fbFileLists.Extensions = New String() {"txt"}
        fbGEN.Extensions = New String() {"vecto"}
        fbVEH.Extensions = New String() {"vveh"}
        fbMAP.Extensions = New String() {"vmap"}
        fbDRI.Extensions = New String() {"vdri"}
        fbFLD.Extensions = New String() {"vfld"}
        fbTRS.Extensions = New String() {"trs"}
        fbMAA.Extensions = New String() {"maa"}
        fbMAC.Extensions = New String() {"mac"}
        fbWUA.Extensions = New String() {"wua"}
        fbWUC.Extensions = New String() {"wuc"}
        fbCDW.Extensions = New String() {"cdw"}
        fbATC.Extensions = New String() {"atc"}
        fbBAT.Extensions = New String() {"bat"}
        fbEMO.Extensions = New String() {"emo"}
        fbEAN.Extensions = New String() {"ean"}
        fbGET.Extensions = New String() {"get"}
        fbSTE.Extensions = New String() {"ste"}
        fbEKF.Extensions = New String() {"ekf"}
        fbEXS.Extensions = New String() {"exs"}
        fbFZP.Extensions = New String() {"fzp"}
        fbFLT.Extensions = New String() {"flt"}
        fbTEM.Extensions = New String() {"tem"}
        fbSTR.Extensions = New String() {"str"}

        fbENG.Extensions = New String() {"veng"}
        fbWHTC.Extensions = New String() {"vwhtc"}
        fbGBX.Extensions = New String() {"vgbx"}
        fbACC.Extensions = New String() {"vacc"}
        fbAUX.Extensions = New String() {"vaux"}

    End Sub
    Private Sub FB_Close()
        fbWorkDir.Close()
        fbFileLists.Close()
        fbGEN.Close()
        fbVEH.Close()
        fbMAP.Close()
        fbDRI.Close()
        fbFLD.Close()
        fbTRS.Close()
        fbMAA.Close()
        fbMAC.Close()
        fbWUA.Close()
        fbWUC.Close()
        fbCDW.Close()
        fbATC.Close()
        fbBAT.Close()
        fbEMO.Close()
        fbEAN.Close()
        fbGET.Close()
        fbSTE.Close()
        fbEKF.Close()
        fbEXS.Close()
        fbFZP.Close()
        fbFLT.Close()
        fbTEM.Close()
        fbSTR.Close()

        fbENG.Close()
        fbWHTC.Close()
        fbGBX.Close()
        fbACC.Close()
        fbAUX.Close()

    End Sub
#End Region

#Region "PHEM-Worker"

    'PHEM-Launcher
    Public Sub PHEM_Launcher()
        Dim ProgOverall As Boolean
Raphael LUZ's avatar
Raphael LUZ committed
        Dim GEN0 As cGEN
        'Called when PHEM already running
        If PHEMworker.IsBusy Then
            GUImsg(tMsgID.Err, "VECTO is already running!")
        'Delete GENlist-Selection
        Me.LvGEN.SelectedItems.Clear()

        Select Case LastModeIndex
            Case 0
                PHEMmode = tPHEMmode.ModeSTANDARD
            Case 1
                PHEMmode = tPHEMmode.ModeBATCH
        End Select

        'Wenn mehr als 100 Kombinationen in Batch fragen ob sekündliche Ausgabe |@@| When Batch resulting in more than 100 combinations per second, ask whether to dump-output  per second
        If (PHEMmode = tPHEMmode.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 second-by-second 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
Raphael LUZ's avatar
Raphael LUZ committed
        If PHEMmode = tPHEMmode.ModeBATCH Or JobFileList.Count > 1 Then
            ProgOverall = True
        Else
            GEN0 = New cGEN
            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

    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.GrBoxADV.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 File-lists
    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, Cfg.WorkDPath))
        Next

    End Sub

    Private Sub SetCycleList()
        Dim LV0 As ListViewItem

        JobCycleList.Clear()

        If PHEMmode = tPHEMmode.ModeBATCH Then
            For Each LV0 In Me.LvDRI.CheckedItems
                JobCycleList.Add(fFileRepl(LV0.SubItems(0).Text, Cfg.WorkDPath))
            Next
        End If

    End Sub

    Private Sub Job_Launcher(ByVal ProgOverallEnabled As Boolean)

        If PHEMworker.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
        PHEMworker.RunWorkerAsync()

    End Sub

    'Abort Job
    Private Sub JobAbort()
        Me.Button1.Enabled = False
        Me.Button1.Text = "Aborting..."
        Me.Button1.Image = My.Resources.Play_icon_gray
        PHEMworker.CancelAsync()
    End Sub


#Region "BackgroundWorker1"

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


    End Sub

    'Progress Report
    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
                'At x.ProgSec = -1 no update of ProgBarSec
                If x.ProgSec = 0 Then
                    ProgSecStart()
                ElseIf x.ProgSec > 0 Then
                    ProgBarCtrl.ProgJobInt = x.ProgSec
                    ProgSecUpdate(False)
                End If

            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

Raphael LUZ's avatar
Raphael LUZ committed
        'Falls Optimierer aktiv werden hier die Zielfunktion ausgegeben und Signal an Interface |@@| If Optimizers(Optimierer ) are active here, then dump the Objective-function(Zielfunktion ) and Signal to interface
        If bOptOn Then
            If Result = tCalcResult.Err Or Result = tCalcResult.Abort Then OptERstat = True
            OptEND()
        End If
        '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.WriteLine(">>>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-Events (Init, Buttons,...)"

#Region "Form Init/Close"

    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

        DRIpageHere = True
        DRIpage = Me.TabPageDRI

        DEVpage = Me.TabPageDEV
        Me.TabControl1.Controls.Remove(DEVpage)

        LastModeIndex = 3
        LastModeName = ""

        ComLineShutDown = False

        FB_Initialize()

        Me.Text = "VECTO " & VECTOvers


        'FileLists
        GenList = New cFileListView(MyConfPath & "joblist.txt")
        GenList.LVbox = Me.LvGEN
        DriList = New cFileListView(MyConfPath & "cyclelist.txt")
        DriList.LVbox = Me.LvDRI
        BatchGenList = New cFileListView(MyConfPath & "joblist.txt")
        BatchGenList.LVbox = Me.LvGEN

        '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
        PHEMworker = Me.BackgroundWorker1
        PHEMworker.WorkerReportsProgress = True
        PHEMworker.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

        Me.GrbxTest.Visible = False

    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
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
        'VEC.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 with PHEM
    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()
                AddToListViewDRI(driFiles.ToArray)
            End If

        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()
                AddToListViewGEN(vecFiles.ToArray)
            Else
                ComFile = vecFiles(0)
            End If
        End If
        'Run or open file editor if file is specified
        If bRUN Then
            PHEM_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
        Try
            LOGfile.WriteLine("Closing Session " & Now)
            LOGfile.WriteLine("------------------------------------------------------------------------------------------")
            LOGfile.Close()
        Catch ex As Exception
        End Try


        SetOptions()
        Cfg.ConfigSAVE()
        If DEV.Enabled Then DEV.SaveToFile()

        'File browser instances close
        FB_Close()

    End Sub

#End Region

    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.GenDir = ""
                        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.GenDir = ""
                        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.GenDir = ""
                        If F_ENG.WindowState = FormWindowState.Minimized Then F_ENG.WindowState = FormWindowState.Normal
                        F_ENG.BringToFront()
                    End If
                    F_ENG.openENG(File)
                Case ".VECTO"
                    OpenGENEditor(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

    End Sub

#Region "GEN Liste"

#Region "Events"

    Private Sub ButtonGENremove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGENremove.Click
        removeGEN()
    End Sub

    Private Sub ButtonGENadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGENadd.Click
        addGEN()
    End Sub

    Private Sub ButtonGENoptions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGENopt.Click
        ConMenTarget = Me.LvGEN
        ConMenTarGEN = True

        'Locked functions show/hide
        Me.LoadListToolStripMenuItem.Enabled = Not GUIlocked
        Me.LoadDefaultListToolStripMenuItem.Enabled = Not GUIlocked
        Me.ClearListToolStripMenuItem.Enabled = Not GUIlocked
        Me.RemovePathsToolStripMenuItem2.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 removeGEN()
            Case Keys.Enter
                OpenGenOrAdv()
        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
            OpenGenOrAdv()
        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
        UpdateGENTabText()

    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
        UpdateGENTabText()
    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)
        AddToListViewGEN(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 File from list
    Private Sub removeGEN()
        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
        UpdateGENTabText()
    End Sub

    'Append File to List
    Private Sub addGEN()
        Dim x As String()
        Dim Chck As Boolean = False

        x = New String() {""}

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

    End Sub

    Private Sub OpenGenOrAdv()
        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, Cfg.WorkDPath)
        If Not IO.File.Exists(f) Then
            MsgBox(f & " not found!")
        Else
Raphael LUZ's avatar
Raphael LUZ committed
            OpenGENEditor(f)
    'GEN/ADV list: Add File
    Private Sub AddToListViewGEN(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 PHEM runs: Cancel operation (because Mode-change during calculation is not very clever)
        If PHEMworker.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
        UpdateGENTabText()


    End Sub

    Public Sub AddToListViewGEN(ByVal Path As String, Optional ByVal Txt As String = " ")
        Dim p(0) As String
        p(0) = Path
        AddToListViewGEN(p, Txt)
    End Sub

    Private Sub UpdateGENTabText()
        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