Files
cameramanager/CameraMng/SetConfigForm.vb
T
2025-07-30 11:20:57 +02:00

238 lines
9.3 KiB
VB.net

Imports System.Globalization
Imports System.IO
Public Class SetConfigForm
Private CameraListCfg As New List(Of String)
Private myImage As Image
Private CurrIndexRow As Integer = 0
Private CurrAppliedConfig As String = String.Empty
Sub New()
' La chiamata è richiesta dalla finestra di progettazione.
InitializeComponent()
' Aggiungere le eventuali istruzioni di inizializzazione dopo la chiamata a InitializeComponent().
End Sub
Private Sub LoadWindows() Handles Me.Load
PopolateDataGrid()
CurrAppliedConfig = FrmMain.ComboBoxCameraCfg.SelectedItem
End Sub
Private Sub PopolateDataGrid()
DataGridView1.Rows.Clear()
CameraListCfg.Clear()
ComboCamera.Items.Clear()
Dim DirToReadCfg As String = FrmMain.sDataRoot
' Popolo combobox con idcamera
For Each CameraItem As String In FrmMain.ComboBoxCameras.Items
ComboCamera.Items.Add(CameraItem)
Next
' Popolo text con configurazione
For Each CfgItem As String In FrmMain.ComboBoxCameraCfg.Items
Dim NomeFileCfg As String = DirToReadCfg & If(CfgItem = "Default", String.Empty, CfgItem) & "\CameraMng.cfg"
Dim riga As New DataGridViewRow()
' Crea le celle corrispondenti alle colonne
riga.CreateCells(DataGridView1)
riga.Cells(0).Value = CfgItem
Dim id As String = ReadIdCameraFromCfg(NomeFileCfg)
If Not String.IsNullOrEmpty(id) Then
' Icone CFG
If CameraListCfg.IndexOf(id) < 0 Then
CameraListCfg.Add(id)
riga.Cells(1).Value = GetCurrIco(2)
Else
riga.Cells(1).Value = GetCurrIco(0)
End If
' Icone CAMERA
If ComboCamera.Items.IndexOf(id) > -1 Then
riga.Cells(3).Value = GetCurrIco(2)
riga.Cells(2).Value = id
Else
riga.Cells(3).Value = GetCurrIco(0)
End If
Else
riga.Cells(1).Value = GetCurrIco(-1)
riga.Cells(3).Value = GetCurrIco(-1)
End If
riga.Cells(4).Value = "Save"
riga.Cells(5).Value = "Apply"
' Aggiungi la riga completa al DataGridView
DataGridView1.Rows.Add(riga)
If CfgItem = FrmMain.ComboBoxCameraCfg.SelectedItem Then
DataGridView1.ClearSelection()
' Mantengo la selezione sulla riga corrente
DataGridView1.Rows(DataGridView1.Rows.Count - 1).Selected = True
' Indico in grassetto il comando Apply
End If
Next
End Sub
Private Sub RefreshDataGrid(IndexRawDataGrid As Integer)
DataGridView1.ClearSelection()
Dim CfgItem As String = DataGridView1.Rows(IndexRawDataGrid).Cells("Config").Value.ToString()
' Aggiorno lo stato delle icone della lista
Dim DirToReadCfg As String = FrmMain.sDataRoot
Dim NomeFileCfg As String = DirToReadCfg & If(CfgItem = "Default", String.Empty, CfgItem) & "\CameraMng.cfg"
' Creo la nuova riga che sostituirà quella precedente
Dim riga As New DataGridViewRow()
' Crea le celle corrispondenti alle colonne
riga.CreateCells(DataGridView1)
riga.Cells(0).Value = CfgItem
Dim id As String = ReadIdCameraFromCfg(NomeFileCfg)
If Not String.IsNullOrEmpty(id) Then
' Icone CFG
If CameraListCfg.IndexOf(id) < 0 Then
riga.Cells(1).Value = GetCurrIco(2)
Else
riga.Cells(1).Value = GetCurrIco(0)
End If
' Icone CAMERA
If ComboCamera.Items.IndexOf(id) > -1 Then
riga.Cells(3).Value = GetCurrIco(2)
riga.Cells(2).Value = id
Else
riga.Cells(3).Value = GetCurrIco(0)
End If
Else
riga.Cells(1).Value = GetCurrIco(-1)
riga.Cells(3).Value = GetCurrIco(-1)
End If
riga.Cells(4).Value = "Save"
riga.Cells(5).Value = "Apply"
' Sostituisco la riga corrente: rimuovo la precedente riga e ne inserisco una nuova
DataGridView1.Rows.RemoveAt(IndexRawDataGrid)
DataGridView1.Rows.Insert(IndexRawDataGrid, riga)
' Mantengo la selezione sulla riga corrente
DataGridView1.CurrentCell = DataGridView1.Rows(IndexRawDataGrid).Cells(4)
End Sub
Private Function ReadIdCameraFromCfg(NomeFileCfg As String) As String
Dim IDCamera As String = String.Empty
Dim reader As New StreamReader(NomeFileCfg)
Dim nfi As NumberFormatInfo = New CultureInfo("en-US", False).NumberFormat
nfi.NumberDecimalSeparator = "."
Dim TmpString As String = ""
Try
While (Not reader.EndOfStream)
TmpString = reader.ReadLine()
If TmpString.StartsWith("CameraID=") Then
IDCamera = Mid(TmpString, 10)
Exit While
End If
End While
reader.Close()
reader.Dispose()
Catch ex As Exception
MsgBox("Error in Cfg File " & TmpString)
End Try
Return IDCamera
End Function
Private Function GetCurrIco(Index As Integer) As Image
Select Case Index
Case -1
myImage = My.Resources.cross
Case 0
myImage = My.Resources.warning
Case Else
myImage = My.Resources.accept
End Select
Return myImage
End Function
Public Sub SaveIDCamera(IDConfing As String, IDCamera As String)
Dim NomeFileCfg, TmpString As String
Dim NomeFileTempCfg, DirToReadCfg As String
Dim SaveFileCfg As String
Dim nf As Integer
Dim writer As StreamWriter
Try
DirToReadCfg = FrmMain.sDataRoot & IDConfing
NomeFileCfg = DirToReadCfg & "\CameraMng.cfg"
NomeFileTempCfg = DirToReadCfg & "\CameraMngTmp.cfg"
SaveFileCfg = DirToReadCfg & "\CameraMng" & Format(Now, "yyyyMMddhhmmss") & ".cfg"
If (File.Exists(NomeFileTempCfg)) Then
File.Delete(NomeFileTempCfg)
End If
nf = FreeFile()
FileOpen(nf, NomeFileCfg, OpenMode.Input)
writer = New StreamWriter(NomeFileTempCfg)
TmpString = ""
While Not EOF(nf)
TmpString = LineInput(nf)
If Not TmpString.StartsWith("CameraID=") Then
writer.WriteLine(TmpString, CultureInfo.InvariantCulture)
End If
End While
writer.WriteLine("CameraID=" & IDCamera, CultureInfo.InvariantCulture)
FileClose(nf)
writer.Close()
File.Copy(NomeFileCfg, SaveFileCfg)
If (File.Exists(NomeFileCfg)) Then
File.Delete(NomeFileCfg)
End If
File.Copy(NomeFileTempCfg, NomeFileCfg)
File.Delete(NomeFileTempCfg)
MessageBox.Show("New ID succesfully written on '" & NomeFileCfg & "'.", "Avviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MsgBox("Error in Writing Cfg File " & ex.Message)
End Try
End Sub
' Tutti i click sulla datagrid passono da qui
Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
' Controlla che il click non sia sull'intestazione della colonna
If e.RowIndex < 0 Then Return
DataGridView1.Rows(e.RowIndex).Selected = True
If e.ColumnIndex < 0 Then Return
Dim IDConfig As String = DataGridView1.Rows(e.RowIndex).Cells("Config").Value.ToString()
Dim IDCamera As String = If(Not IsNothing(DataGridView1.Rows(e.RowIndex).Cells("ComboCamera").Value), DataGridView1.Rows(e.RowIndex).Cells("ComboCamera").Value.ToString(), String.Empty)
' Controlla se il click è avvenuto nella colonna dei bottoni (Usa il nome che hai dato alla colonna)
If Me.DataGridView1.Columns(e.ColumnIndex).Name = "SaveConfig" Then
If Not String.IsNullOrEmpty(IDConfig) And Not String.IsNullOrEmpty(IDCamera) Then
SaveIDCamera(IDConfig, IDCamera)
DataGridView1.Rows(e.RowIndex).Cells(4).Value = "Save"
RefreshDataGrid(e.RowIndex)
Else
MessageBox.Show("Non è possibile salvare l'ID di una camera non connessa.", "Avviso", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
End If
ElseIf Me.DataGridView1.Columns(e.ColumnIndex).Name = "ApplyConfig" Then
If Not (String.IsNullOrEmpty(IDConfig) And String.IsNullOrEmpty(IDCamera)) Then
' verifico che non sia stato salvato l'id indicato
If DataGridView1.Rows(e.RowIndex).Cells(4).Value.ToString().Contains("*"c) Then
MessageBox.Show("Salvare la configurazione prima di applicarla.", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
End If
Dim IndCamera As Integer = FrmMain.ComboBoxCameras.Items.IndexOf(IDCamera)
FrmMain.ComboBoxCameras.SelectedIndex = IndCamera
Dim IndCameraCfg As Integer = FrmMain.ComboBoxCameraCfg.Items.IndexOf(IDConfig)
FrmMain.ComboBoxCameraCfg.SelectedIndex = IndCameraCfg
End If
ElseIf Me.DataGridView1.Columns(e.ColumnIndex).Name = "ComboCamera" Then
Dim comboBox As ComboBox = TryCast(sender, ComboBox)
If comboBox IsNot Nothing Then
Dim selectedValue As String = comboBox.SelectedItem.ToString()
If IDCamera <> selectedValue Then
DataGridView1.Rows(e.RowIndex).Cells(4).Value = "Save*"
End If
End If
End If
End Sub
End Class