Files
Dario Sassi 1aa30cb695 EgtDoorCreator :
- sistemata scrittura nell'ini della MTable corrente
- aggiunta gestione configurazione hardware custom con file luae
- WriteFile di Hardware rinominata ReadFile perchè legge un file.
2026-01-28 18:29:01 +01:00

2444 lines
118 KiB
VB.net

Imports System.ComponentModel
Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Public Class Hardware
Implements INotifyPropertyChanged
Friend Shared DoRefresh As Boolean = True
Friend Shared FirstSelection As Boolean = True
Dim ReLoading As Boolean = False
Dim bTypeListExist As Boolean = False
Dim m_GroupChapterName As New ObservableCollection(Of String)
Dim ErrorReading As String = String.Empty
Dim BackupDir As String = IniFile.m_CompoDir & ConstGen.BACKUPDIR
Dim bNewHardware As Boolean = False
Dim bIsFrame As Boolean = False
Dim CurrHardwareFilePath As String = String.Empty
Dim sLastTemplate As String = String.Empty
Dim m_LastDirectory As CompoBrandDir
Dim m_MatchingDoor_Door As Boolean = False
' Path StdTemplate.ini
Private m_StdTemplate As String = String.Empty ' il percorso viene aggiornato ad ogni scelta dell'hardware in LoadType()
Public ReadOnly Property StdTemplate As String
Get
Return m_StdTemplate
End Get
End Property
' i parametetri sono suddivisi in sottocapitolli (gruppi di parametri)
Private m_GroupChapters As New ObservableCollection(Of Compo)
Public Property GroupChapters As ObservableCollection(Of Compo)
Get
Return m_GroupChapters
End Get
Set(value As ObservableCollection(Of Compo))
m_GroupChapters = value
End Set
End Property
#Region "BRAND"
Public ReadOnly Property BrandList As ObservableCollection(Of CompoBrandDir)
Get
If Not IsNothing(m_HardwareGeneral) Then
Return m_HardwareGeneral.HardwareFolderList
Else
Return Nothing
End If
End Get
End Property
Private m_SelBrand As CompoBrandDir
Public Property SelBrand As CompoBrandDir
Get
Return m_SelBrand
End Get
Set(value As CompoBrandDir)
If Not IsNothing(m_SelBrand) Then
' sto carciando la cartella per la prima volta
m_LastDirectory = New CompoBrandDir(m_SelBrand, m_HardwareGeneral.Path)
End If
If Map.refHardwarePageVM.m_GeomtryWindowIsOpen Then
If SaveControl() = SaveResult.nCancel Then
RefreshTemplateListEgtDOORCreator()
Return
End If
End If
If IsNothing(value) Then
m_SelBrand = m_LastDirectory
End If
' se decido di procedere allora elimino il file temporaneo
DeleteTempFile()
' verifico che la selezione abbia senso, altrimenti mantengo la selezione precedente
If Not IsNothing(value) Then
m_SelBrand = value
ElseIf Not IsNothing(value) AndAlso Not Directory.Exists(value.ModelDir) Then
' 50542 = {0}: Directory does not exist!
ErrorReading = String.Format(EgtMsg(50542), value.ModelDir)
RefreshTemplateListEgtDOORCreator()
Else
Return
End If
' se l'oggetto Brand esiste
If Not IsNothing(m_SelBrand) Then
' riconosce il tipo di Hardaware in base alla cartella in cui è slavato
If m_SelBrand.ModelDir.ToLower.Contains(FRAME_FOLDER) Then
bIsFrame = True
' aggiormo il jamb con i vaori salvato nella pagina crrente
Map.refHardwarePageVM.Jamb.SetMaterial(Map.refHardwarePageVM.GenericPart.SelectedMaterial)
Map.refHardwarePageVM.GenericPart = Map.refHardwarePageVM.Jamb
Else
bIsFrame = False
' aggiormo il jamb con i vaori salvato nella pagina crrente
Map.refHardwarePageVM.Door.SetMaterial(Map.refHardwarePageVM.GenericPart.SelectedMaterial)
Map.refHardwarePageVM.GenericPart = Map.refHardwarePageVM.Door
End If
' Carico lista template (la lista dei file lua)
TemplateList = m_SelBrand.ModelFileList
DoRefresh = True
' verifico che la lista contenga almeno un file
If m_SelBrand.ModelFileList.Count > 0 Then
' verifico se esisteva un file selzionato, e che quetso esista ancora
If Not String.IsNullOrWhiteSpace(SelTemplate) AndAlso File.Exists(m_SelBrand.ModelDir & "\" & SelTemplate & LUA_EXTENSION) Then
' ricarico l'elemento dalla lista
For Each ItemFile In m_SelBrand.ModelFileList
If ItemFile = m_SelTemplate Then
SelTemplate = ItemFile
Exit For
End If
Next
ElseIf File.Exists(m_SelBrand.ModelDir & "\" & m_SelBrand.ModelFileList(0) & LUA_EXTENSION) Then
' se non esiste nessuna selezione carico il primo file della lista
SelTemplate = m_SelBrand.ModelFileList(0)
Else
' se i controlli precedenti falliscono allora restituisco stringa vuota
SelTemplate = String.Empty
'Map.refSceneManagerVM.RefreshBtn()
End If
Else
SelTemplate = String.Empty
'Map.refSceneManagerVM.RefreshBtn()
End If
Else
SelTemplate = String.Empty
'Map.refSceneManagerVM.RefreshBtn()
End If
' termine della selezione
NotifyPropertyChanged("SelBrand")
End Set
End Property
#End Region ' Brand
#Region "TEMPLATE"
Private m_HardwareGeneral As CompoType
Public Property HardwareGeneral As CompoType
Get
Return m_HardwareGeneral
End Get
Set(value As CompoType)
m_HardwareGeneral = value
End Set
End Property
Private m_TemplateList As New ObservableCollection(Of String)
Public Property TemplateList As ObservableCollection(Of String)
Get
Return m_TemplateList
End Get
Set(value As ObservableCollection(Of String))
m_TemplateList = value
DoRefresh = False
NotifyPropertyChanged("TemplateList")
End Set
End Property
Private m_SelTemplate As String = ""
' questa proprietà non è usata nel momento in cui generiamo un nuovo Hardware
Public Property SelTemplate As String
Get
Return m_SelTemplate
End Get
Set(value As String)
' salvo l'ultimo valore registrato
sLastTemplate = m_SelTemplate
If m_SelTemplate = value AndAlso Not IsNothing(m_LastDirectory) AndAlso m_SelBrand.ModelDirGraphic = m_LastDirectory.ModelDirGraphic Then Return
m_SelTemplate = value
If Not Map.refHardwarePageVM.m_GeomtryWindowIsOpen Then
If SaveControl() = SaveResult.nCancel Then
Application.Current.Dispatcher.BeginInvoke(New Action(Sub()
m_SelTemplate = sLastTemplate
NotifyPropertyChanged("SelTemplate")
End Sub), System.Windows.Threading.DispatcherPriority.ContextIdle, Nothing)
NotifyPropertyChanged("TemplateList")
Return
End If
End If
sLastTemplate = m_SelTemplate
' elimino il file temporaneo
DeleteTempFile()
' pulisco la lista dei capitoli per il nuovo Hardware
ClearGroupChapters()
' controllo che la selezione abbia restituito un nome
If Not String.IsNullOrWhiteSpace(m_SelTemplate) Then
If bTypeListExist Then
' se restituisce dei problemi in fase di caricamento del file allora eseguo un reload delle liste
If Not SetTypeFromTemplate(m_SelTemplate) Then
m_SelTemplate = String.Empty
ShowErrorMsg()
RefreshTemplateListEgtDOORCreator()
Return
End If
NotifyPropertyChanged("VisibilityType")
End If
FirstSelection = True ' Comunico grafica di eseguire lo zoom
ReadChapterTemplate() ' Rileggo i parametri del SetdTemplate
'ReadTemplate(m_SelTemplate) ' Carico i dati del template
ReadTemplate()
' Map.refSceneManagerVM.RefreshBtn()
End If
NotifyPropertyChanged("SelTemplate")
LoadSwingFromTemplate()
Map.refSceneManagerVM.RefreshBtn()
' NotifyPropertyChanged("TemplateList")
ShowErrorMsg()
End Set
End Property
Private m_VisibilityTemplate As Visibility = Visibility.Visible
Public Property VisibilityTemplate As Visibility
Get
Return m_VisibilityTemplate
End Get
Set(value As Visibility)
m_VisibilityTemplate = value
End Set
End Property
#End Region ' Name-Template
#Region "TYPELIST"
Private m_TypeList As New List(Of TypeHardware)
Public Property TypeList As List(Of TypeHardware)
Get
Return m_TypeList
End Get
Set(value As List(Of TypeHardware))
m_TypeList = value
NotifyPropertyChanged("TypeList")
End Set
End Property
' se non dovessere esistere un tipo, al momento del salvataggio cerca il file con nome Template ed estensione .Templ
Private m_SelType As TypeHardware = New TypeHardware(TYPE_STD_TEMPLATE, TYPE_STD_TEMPLATE_INI)
Public Property SelType As TypeHardware
Get
Return m_SelType
End Get
Set(value As TypeHardware)
' verifico se tipo è cambiato -- OrElse value.Name <> m_SelType.Name
Dim bChanged As Boolean = If(Not IsNothing(m_SelType), value.NameINI <> m_SelType.NameINI, True)
m_SelType = value
' se cambiato carico il suo progetto con quotature/suggerimenti
If bChanged Then Map.refHardwareHelpSceneHostV.LoadHelpProject()
NotifyPropertyChanged("SelType")
End Set
End Property
Private m_VisibilityType As Visibility = Visibility.Collapsed
Public Property VisibilityType As Visibility
Get
Return m_VisibilityType
End Get
Set(value As Visibility)
m_VisibilityType = value
NotifyPropertyChanged("VisibilityType")
End Set
End Property
' se non viene modificata il tipo non può essere modificato
Private m_IsEnableType As Boolean = False
Public Property IsEnableType As Boolean
Get
If Not VisibilityType = Visibility.Visible Then Return False
Return m_IsEnableType
End Get
Set(value As Boolean)
m_IsEnableType = value
NotifyPropertyChanged("IsEnableType")
End Set
End Property
#End Region ' TypeList
#Region "MATCHING"
'creo il capitolo "Match File"
Private Function CreateChapterMatching() As Compo
If Me.SelBrand.ModelDir.ToLower.Contains(FRAME_FOLDER) Then Return Nothing
' creo la classe che ospiterà gli oggetti di tipo ComboBox
Dim CompoMatch As New Compo(m_HardwareGeneral, True)
CompoMatch.TemplateDDFName = MATCHING_FILE_TEMPLATE
CompoMatch.TemplateName = MATCHING_FILE_TEMPLATE & " Door to Frame"
' creo le liste delle configurazioni
Dim LocalHardwareListName As New ObservableCollection(Of String)
Dim LocalHardwareListDDFName As New ObservableCollection(Of String)
' se questo file non esiste dovrei interrompere il caricamento?
If File.Exists(m_HardwareGeneral.Path & "\" & MATCHING_FILE_NAME) Then
LocalHardwareListName.Add(MATCHING_FILE_AUTOMATIC)
LocalHardwareListDDFName.Add(MATCHING_FILE_AUTOMATIC)
End If
' aggiungo alla lista il riferiemento "None"
LocalHardwareListName.Add(MATCHING_FILE_NONE)
LocalHardwareListDDFName.Add(MATCHING_FILE_NONE)
' ricerco il capitolo [Matching] nel file di configurazione della componente
' carcio la lista "LocalHardwareListDDFName" l'elemco
IniFile.GetPrivateProfileMatchHardware(ConstCompo.MATCHING_INI, "List", LocalHardwareListDDFName, LocalHardwareListName, m_HardwareGeneral.Path & "\" & CONFIGINI_FILE_NAME)
' verifico se esistano cartelle con estensione ".Frame" nel direttorio della componente
If m_HardwareGeneral.FrameFolderList.Count > 0 AndAlso LocalHardwareListDDFName.IndexOf(m_HardwareGeneral.DDFName) < 0 Then
' allora aggiungo alla lista il riferiento della compoenente stessa
LocalHardwareListName.Add(m_HardwareGeneral.Name)
LocalHardwareListDDFName.Add(m_HardwareGeneral.DDFName)
End If
' rimuovo dall'elenco eventuali cartelle che non contengano cartelle con estensione ".Frame"
For Each Item In Map.refCompoPanelHardwareVM.CompoTypeList
For ElemntIndex As Integer = LocalHardwareListDDFName.Count - 1 To 0 Step -1
If Item.DDFName = LocalHardwareListDDFName(ElemntIndex) Then
' se non esistono direttori ".Frame" nel cartella indicata allora rimuovo dalla lista
If Item.FrameFolderList.Count < 1 Then
Dim Index As Integer = LocalHardwareListName.IndexOf(Item.Name)
LocalHardwareListName.RemoveAt(Index)
LocalHardwareListDDFName.RemoveAt(Index)
Exit For
End If
End If
Next
Next
If LocalHardwareListDDFName.Count < 1 Then Return Nothing
' aggiungo il primo parametro "Matching" (lista appena costruita)
Dim ComboBoxMatch As New ComboBoxParam(ConstCompo.MATCHING_INI, EgtMsg(50224), CompoMatch, LocalHardwareListName, LocalHardwareListDDFName, LocalHardwareListName(0))
CompoMatch.CompoParamList.Add(ComboBoxMatch)
If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then
CompoMatch.GroupVisibilityChapter = Visibility.Collapsed
End If
Return CompoMatch
End Function
' permette di creare il Matching Door-Door (quindi non solo con le componenti di tipo frame)
Private Function CreateChapterMatchingDoor() As Compo
If Me.SelBrand.ModelDir.ToLower.Contains(FRAME_FOLDER) Then Return Nothing
' verifico se la componente deve gestire degli accomppiamenti Anta-Anta
m_MatchingDoor_Door = IniFile.GetPrivateProfileRefCompoDoor(ConstCompo.MATCHING_INI, "Door", m_HardwareGeneral.Path & "\" & CONFIGINI_FILE_NAME)
If Not m_MatchingDoor_Door Then Return Nothing
' creo la classe che ospiterà gli oggetti di tipo ComboBox
Dim CompoMatch As New Compo(m_HardwareGeneral, True)
CompoMatch.TemplateDDFName = MATCHING_FILE_TEMPLATE_DOOR
CompoMatch.TemplateName = MATCHING_FILE_TEMPLATE_DOOR & " to Door"
' creo le liste delle configurazioni
Dim LocalHardwareListName As New ObservableCollection(Of String)
Dim LocalHardwareListDDFName As New ObservableCollection(Of String)
' se questo file non esiste dovrei interrompere il caricamento?
If File.Exists(m_HardwareGeneral.Path & "\" & MATCHING_FILE_NAME) Then
LocalHardwareListName.Add(MATCHING_FILE_AUTOMATIC)
LocalHardwareListDDFName.Add(MATCHING_FILE_AUTOMATIC)
End If
' aggiungo alla lista il riferiemento "None"
LocalHardwareListName.Add(MATCHING_FILE_NONE)
LocalHardwareListDDFName.Add(MATCHING_FILE_NONE)
' ricerco il capitolo [Matching] nel file di configurazione della componente
' carcio la lista "LocalHardwareListDDFName" l'elemco
IniFile.GetPrivateProfileMatchHardware(ConstCompo.MATCHING_INI, "List", LocalHardwareListDDFName, LocalHardwareListName, m_HardwareGeneral.Path & "\" & CONFIGINI_FILE_NAME)
If LocalHardwareListDDFName.Count < 1 Then Return Nothing
' aggiungo il primo parametro "Matching" (lista appena costruita)
Dim ComboBoxMatch As New ComboBoxParam(ConstCompo.MATCHING_INI, EgtMsg(50224), CompoMatch, LocalHardwareListName, LocalHardwareListDDFName, LocalHardwareListName(0))
CompoMatch.CompoParamList.Add(ComboBoxMatch)
' disabilito il capitolo se non è specificato nel file Config.ini "[Matching.ini] Door = 1"
If OptionModule.m_ConfigurationSoftware = ConfigType.Door OrElse Not m_MatchingDoor_Door Then
CompoMatch.GroupVisibilityChapter = Visibility.Collapsed
End If
Return CompoMatch
End Function
' Definita la componete che vogliamo associare restituice l'elenco di tutti i direttori con estensione ".Frame"
Public Function SelectMatching(ByRef ComboBoxMatch As ComboBoxParam, ByRef CompoMatch As Compo) As ObservableCollection(Of CompoBrandDir)
Dim BrandList As New ObservableCollection(Of CompoBrandDir)
For Each Item In Map.refCompoPanelHardwareVM.CompoTypeList
If Item.Name = ComboBoxMatch.SelItem Then
If m_MatchingDoor_Door AndAlso CompoMatch.TemplateDDFName = MATCHING_FILE_TEMPLATE_DOOR Then
BrandList = Item.FolderList
Else
BrandList = Item.FrameFolderList
End If
Exit For
End If
Next
Return BrandList
End Function
' a seconda della scelta fatta nel passaggio precedente Aggiorna la grafica per mostrare l'elenco dei brand e dei file
Public Sub SelectFileMatching(ComboBoxMatch As ComboBoxParam, BrandList As ObservableCollection(Of CompoBrandDir))
' eseguo una copia locale della componente Matching
Dim CompoMatch As Compo = ComboBoxMatch.CurrCompo
Dim BrandListGraphic As New ObservableCollection(Of String)
' estrapolo dalla lista del BrandList
If IsNothing(BrandList) Then
' se l'oggetto lista
For Each Item In Map.refCompoPanelHardwareVM.CompoTypeList
If Item.Name = ComboBoxMatch.SelItem Then
BrandList = Item.FrameFolderList
Exit For
End If
Next
End If
For Each Element In BrandList
BrandListGraphic.Add(Element.ModelDirGraphic)
Next
' prima di procedere ripulisco completamente l'elenco
If CompoMatch.CompoParamList.Count > 1 Then
CompoMatch.CompoParamList.RemoveAt(2)
CompoMatch.CompoParamList.RemoveAt(1)
End If
' se la lista dei brand non è vuota e la lista dei file non è vuota allora mostro a video gli elenchi aggiornati
If BrandList.Count > 0 AndAlso BrandList(0).ModelFileList.Count > 0 Then
Dim ComboBoxBrand As New ComboBoxParam(ConstCompo.BRAND_INI, EgtMsg(50225), CompoMatch, BrandListGraphic, BrandListGraphic, BrandListGraphic(0))
CompoMatch.CompoParamList.Add(ComboBoxBrand)
Dim FileList As New ObservableCollection(Of String)
FileList = BrandList(0).ModelFileList
Dim ComboBoxTemplate As New ComboBoxParam(ConstCompo.BRAND_FILE_INI, EgtMsg(50226), CompoMatch, FileList, FileList, FileList(0))
CompoMatch.CompoParamList.Add(ComboBoxTemplate)
Else
End If
End Sub
' dalla scelta del brand restituisce la lista dei file corretta
Public Sub SelectBrandMatching(ComboBoxBrand As ComboBoxParam)
' eseguo una copia della componente
Dim CurrCompo As Compo = ComboBoxBrand.CurrCompo
' se il parametro che sto caricando non Brand allora esco
If CurrCompo.CompoParamList.Count < 2 Then Return
' esguo una copia del parametro Matching
Dim ComboBoxMatch As ComboBoxParam = DirectCast(CurrCompo.CompoParamList(0), ComboBoxParam)
' definisco le liste dei brand (assegnata la componete di riferimento)
Dim BrandListGraphic As New ObservableCollection(Of String)
Dim BrandList As New ObservableCollection(Of CompoBrandDir)
' ricavo l'elenco dei brand
For Each Item In Map.refCompoPanelHardwareVM.CompoTypeList
If Item.Name = ComboBoxMatch.SelItem Then
BrandList = Item.FrameFolderList
If ComboBoxBrand.CurrCompo.TemplateDDFName = MATCHING_FILE_TEMPLATE_DOOR Then
BrandList = Item.FolderList
End If
For Each Element In BrandList
BrandListGraphic.Add(Element.ModelDirGraphic)
Next
Exit For
End If
Next
Dim Index As Integer = -1
For Each Item In BrandList
If Item.ModelDirGraphic = ComboBoxBrand.SelItem Then
Index = BrandList.IndexOf(Item)
Exit For
End If
Next
If Index = -1 Then Return
If CurrCompo.CompoParamList.Count > 1 Then
CurrCompo.CompoParamList.RemoveAt(2)
End If
Dim FileList As New ObservableCollection(Of String)
FileList = BrandList(Index).ModelFileList
Dim ComboBoxTemplate As New ComboBoxParam(ConstCompo.BRAND_FILE_INI, EgtMsg(50226), CurrCompo, FileList, FileList, FileList(0))
CurrCompo.CompoParamList.Add(ComboBoxTemplate)
End Sub
#End Region ' Matching
#Region "GENERAL FUNCTION"
#Region "Caricamento"
Public Function ShowErrorMsg() As Boolean
If Not String.IsNullOrEmpty(ErrorReading) Then
MessageBox.Show(ErrorReading, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
End If
ErrorReading = String.Empty
Return True
End Function
' elimina il file temporaneo CurrHardware.lua (se esiste anche CurrHardware.luae)
Public Function DeleteTempFile() As Boolean
If String.IsNullOrWhiteSpace(CurrHardwareFilePath) Then Return False
Try
File.Delete(CurrHardwareFilePath)
if File.Exists(CurrHardwareFilePath & "e") Then File.Delete(CurrHardwareFilePath & "e")
Catch ex As Exception
End Try
Return True
Return True
End Function
' Carica il nome della Componente, La lista dei template, La lista dei tipi (Config.ini)
Public Sub LoadTemplate(ByRef CurrCompoType As CompoType)
' eseguo un aggiornamento della lista
CurrCompoType.LoadListTemplate()
' carico il general dell'hardware
m_HardwareGeneral = CurrCompoType.DeepCopy()
If m_HardwareGeneral.HardwareFolderList.Count = 0 Then
Dim CurrFolder = New CompoBrandDir(m_HardwareGeneral.Path, Path.GetFileName(m_HardwareGeneral.Path))
m_HardwareGeneral.HardwareFolderList.Add(CurrFolder)
End If
NotifyPropertyChanged("BrandList")
' carico la lista dei Type
bTypeListExist = LoadType()
If Not bTypeListExist Then
'SelBrand = Nothing
SelBrand = BrandList(0)
ElseIf BrandList.Count > 0 Then
SelBrand = BrandList(0)
Else
EgtNewFile()
End If
Dim ErrorList As String = String.Empty
If EgtUILib.GetPrivateProfileInt(S_TEMPLATE, K_ISACTIVE, 1, CurrCompoType.Path & "\" & CONFIGINI_FILE_NAME) = 0 Then
VisibilityTemplate = Visibility.Collapsed
NotifyPropertyChanged("VisibilityTemplate")
End If
End Sub
' carico lo swing da assegnare al part
Private Sub LoadSwingFromTemplate()
m_StdTemplate = m_HardwareGeneral.Path & "\" & STD_TEMPLATE
If Not File.Exists(m_StdTemplate) Then Return
Dim SwingTemplate As String = String.Empty
If Not IsNothing(Map.refHardwarePageVM.GenericPart) And Not String.IsNullOrEmpty(Map.refHardwarePageVM.GenericPart.Swing) Then
SwingTemplate = Map.refHardwarePageVM.GenericPart.Swing
Else
SwingTemplate = "RH"
End If
If String.IsNullOrEmpty(SwingTemplate) Or Not (GetMainPrivateProfileInt(S_GENERAL, "CloneDoor", 0) = 1) Then
IniFile.StdTemplateGetPrivateProfileString("Hardware", "Swing", SwingTemplate, SwingTemplate)
End If
Map.refHardwarePageVM.GenericPart.SetSwing(SwingTemplate)
If bIsFrame Then
IniFile.StdTemplateGetPrivateProfileString("Hardware", "SwingFrame", "RH", SwingTemplate)
Map.refHardwarePageVM.GenericPart.SetSwing(SwingTemplate)
' per gestire in futuro lo swing delle ante
'Dim Local_Jamb As Part = Map.refHardwarePageVM.GenericPart
'If Not IsNothing(m_JambL) AndAlso Not IsNothing(m_JambR) AndAlso m_JambL.SwingAlias.Name.Contains("LH") Then
' m_JambL.TypePart = ConstGen.PART_FRAME_LEFT & ConstGen.HINGE
' m_JambR.TypePart = ConstGen.PART_FRAME_RIGHT & ConstGen.LOCK
'Else
' If Not IsNothing(m_JambL) Then m_JambL.TypePart = ConstGen.PART_FRAME_LEFT & ConstGen.LOCK
' If Not IsNothing(m_JambR) Then m_JambR.TypePart = ConstGen.PART_FRAME_RIGHT & ConstGen.HINGE
'End If
'If Not IsNothing(m_JambB) Then m_JambB.TypePart = ConstGen.PART_FRAME_BOTTOM & ConstGen.BOTTOM
'If Not IsNothing(m_JambT) Then m_JambT.TypePart = ConstGen.PART_FRAME_TOP & ConstGen.TOP
End If
End Sub
Private Sub FindSideJamb()
If Map.refHardwarePageVM.GenericPart.CompoList.Count < 1 Then Return
'If String.IsNullOrEmpty(HardwareGeneral.JambSide) Then
For Each Item In Map.refHardwarePageVM.GenericPart.CompoList(0).CompoParamList
If TypeOf Item Is ComboBoxParam AndAlso
Item.DDFName = "side" Then
Dim CBoxPar As ComboBoxParam = DirectCast(Item, ComboBoxParam)
Dim IndexItem As Integer = CBoxPar.ItemList.IndexOf(CBoxPar.SelItem)
If IndexItem > -1 Then
HardwareGeneral.SetJambSide(CBoxPar.ItemListDDF(IndexItem))
End If
'HardwareGeneral.SetJambSide(CBoxPar.SelItem)
Exit For
End If
Next
'End If
If HardwareGeneral.JambSide.ToLower.Contains("hinge") Then
Map.refHardwarePageVM.GenericPart.TypePart = PART_FRAME_LEFT & HINGE
If Not HardwarePartVM.bIsSettingDoor Then
Map.refHardwarePageVM.GenericPart.SetWidth(OptionModule.m_WidthJamb)
Map.refHardwarePageVM.GenericPart.SetHeight(OptionModule.m_Height)
End If
Return
ElseIf HardwareGeneral.JambSide.ToLower.Contains("lock") Then
Map.refHardwarePageVM.GenericPart.TypePart = PART_FRAME_LEFT & LOCK
If Not HardwarePartVM.bIsSettingDoor Then
Map.refHardwarePageVM.GenericPart.SetWidth(OptionModule.m_WidthJamb)
Map.refHardwarePageVM.GenericPart.SetHeight(OptionModule.m_Height)
End If
Return
ElseIf HardwareGeneral.JambSide.ToLower.Contains("top") Then
Map.refHardwarePageVM.GenericPart.TypePart = PART_FRAME_TOP & TOP
If Not HardwarePartVM.bIsSettingDoor Then
Map.refHardwarePageVM.GenericPart.SetWidth(OptionModule.m_Width)
Map.refHardwarePageVM.GenericPart.SetHeight(OptionModule.m_ThicknessHead)
End If
Return
ElseIf HardwareGeneral.JambSide.ToLower.Contains("bottom") Then
Map.refHardwarePageVM.GenericPart.TypePart = PART_FRAME_BOTTOM & BOTTOM
If Not HardwarePartVM.bIsSettingDoor Then
Map.refHardwarePageVM.GenericPart.SetWidth(OptionModule.m_Width)
Map.refHardwarePageVM.GenericPart.SetHeight(OptionModule.m_ThicknessBottom)
End If
Return
End If
End Sub
' carico la lista dei tipi --> devo stampare gli errori
Private Function LoadType() As Boolean
' costruisco la Path del template da leggere
m_StdTemplate = m_HardwareGeneral.Path & "\" & STD_TEMPLATE
If Not File.Exists(m_StdTemplate) Then Return False
Dim List As New List(Of String) ' lista temporanea "1/Mort"
If IniFile.StdTemplateGetPrivateProfileList(S_HARDWARE, K_TYPE, List) Then
m_VisibilityType = Visibility.Visible ' rendo visibile la lista
' leggo nomi
Dim ArrayNameSplit(1) As String
For IndexListType As Integer = 0 To List.Count - 1
ArrayNameSplit = List(IndexListType).Split("/"c)
If IsNumeric(ArrayNameSplit(0)) Then
m_TypeList.Add(New TypeHardware(ArrayNameSplit(1), ArrayNameSplit(0)))
Else
' In file StdTempate.ini is missing numeric param in [Type]
ErrorReading = EgtMsg(50171) & vbCrLf
m_TypeList.Add(New TypeHardware(EgtMsg(50101), "0"))
Return False ' interrompo la lettura
End If
Next
' se esiste una lista di nomi di tipi carico di default il primo che trovo
If m_TypeList.Count > 0 Then SelType = m_TypeList(0)
'NotifyPropertyChanged("TypeListName")
Else
m_TypeList.Add(New TypeHardware(TYPE_STD_TEMPLATE, TYPE_STD_TEMPLATE_INI))
m_VisibilityType = Visibility.Collapsed
Return False ' se la lista è vuota restituisco falso
End If
Return True
End Function
' setta il valore del template --> devo stampare gli errori
Private Function SetTypeFromTemplate(value As String) As Boolean
' carico di Default il valore 1
For IndexListType As Integer = 0 To TypeList.Count - 1
If TypeList(IndexListType).NameINI = "1" Then
SelType = TypeList(IndexListType)
VisibilityType = Visibility.Visible
NotifyPropertyChanged("SelType")
Exit For
End If
Next
' inizio la lettura del file lua selezionato
Dim CurrItemPath As String = CurrPath()
Dim ErrorMsg As String = String.Empty
' se il file ha estensione nge
If Path.HasExtension(CurrItemPath) AndAlso Path.GetExtension(CurrItemPath).ToLower = NGE_EXTENSION Then
' File does not exist
If Not File.Exists(CurrItemPath) Then ErrorReading = EgtMsg(50172) & vbCrLf : Return False ' controllo che esiste il file altrimenti esco
Dim ConfigDefault As String = String.Empty ' configurazione del template
EgtUILib.GetPrivateProfileString(S_NGECONFIG, K_DEFAULT, "", ConfigDefault, m_HardwareGeneral.Path & "\" & CONFIGINI_FILE_NAME)
For IndexTypeList As Integer = 0 To TypeList.Count - 1
' Definition type is not correct:
If TypeList(IndexTypeList).NameINI = ConfigDefault Then Exit For Else ErrorReading = EgtMsg(50173) & ConfigDefault & vbCrLf : Return False
Next
Else
' se il file ha estensione allora aggiungo l'estensione .lua
If Path.GetExtension(CurrItemPath).ToLower <> LUA_EXTENSION Then
CurrItemPath &= LUA_EXTENSION
End If
' controllo che esiste il file altrimenti esco
' File does not exist
If Not File.Exists(CurrItemPath) Then ErrorReading = CurrItemPath & ": " & EgtMsg(50172) & vbCrLf : Return False
' m_TemplateSelItem = value
' carico un vettore con le stringhe del file corrente
Dim ReadCurrCompo() As String = File.ReadAllLines(CurrItemPath)
Dim EndOfFile As Boolean = False
' leggo il vettore di stringhe del file corrente
For LineIndex = 0 To ReadCurrCompo.Count - 1
' copio il valore della riga
Dim CurrCompoFileLine As String = ReadCurrCompo(LineIndex)
' cerco il titolo [Graphic parameters]: se lo trovo
If RegexFunction.IsGraphicParametersTitle(CurrCompoFileLine) Then
' mi preparo per leggere la prima riga dopo il titolo
Dim ParamIndex As Integer = 1
If Not String.IsNullOrWhiteSpace(ParamLine(ReadCurrCompo(LineIndex + ParamIndex), K_DEFAULT)) Then
Dim ConfigDefault As String = Trim(ParamLine(ReadCurrCompo(LineIndex + ParamIndex), K_DEFAULT))
If Not IsNumeric(ConfigDefault) Then
' 50162 =In file {0} param 'Default' must be numeric.
ErrorReading = String.Format(EgtMsg(50162), CurrItemPath)
ErrorReading &= vbCrLf
Return False ' valore letto non è numerico
Else
For IndexListType As Integer = 0 To TypeList.Count - 1
If TypeList(IndexListType).NameINI = ConfigDefault Then
SelType = TypeList(IndexListType)
NotifyPropertyChanged("SelType")
Exit For
End If
Next
Exit For
End If
End If
End If
Next
End If
Return True
End Function
' ricerca il nome dei capitoli associati e chiama la lettura dei parametri
Public Sub ReadChapterTemplate()
Dim sParam As String = String.Empty ' la stringa che contiene tutte le informazioni della componente
Dim ParamIndex As Integer = 1
Dim ChapterIndex As Integer = 1 ' numero del capitolo
Dim IndexChapter As String = "1"
For IndexTypeList As Integer = 0 To m_TypeList.Count - 1
If m_TypeList(IndexTypeList) Is SelType Then
IndexChapter = m_TypeList(IndexTypeList).NameINI
Exit For
End If
Next
Dim S_CHAPTER As String = S_GR_PARAM_HARDWARE & IndexChapter & "." ' il nome del capitolo da leggere "ParametersN."
While EgtUILib.GetPrivateProfileString(S_CHAPTER & ChapterIndex, K_PARAM & ParamIndex, "", sParam, m_StdTemplate) > 0 ' Verifico che esista il capitolo nuovo "Type-ChapterIndex"
Dim Chapter As New Compo(m_HardwareGeneral, True)
Dim Name As String = String.Empty
Dim LuaName As String = String.Empty
' legge il nome del parametro
If StdTemplateGetPrivateProfileChapterName(S_CHAPTER & ChapterIndex, K_NAME, LuaName, Name) Then
Chapter.TemplateDDFName = LuaName
Chapter.TemplateName = Name
End If
' leggo il nome dei capitoli dei parametri
Dim GroupName As String = String.Empty
If StdTemplateGetPrivateProfileGroupChapter(S_CHAPTER & ChapterIndex, "GroupChapter", GroupName) Then
Chapter.GroupNameChapter = GroupName
SetGroupChaptername(Trim(GroupName))
End If
Dim bIsActive As Boolean = True
' legge se è attivo
Dim nIsActive As Integer = 0
nIsActive = StdTemplateGetPrivateProfileInt(S_CHAPTER & ChapterIndex, K_ISACTIVE, nIsActive)
' leggo se il capitolo appartiene al tipo di materiale,
' il tipo di visualizzazione da adoperare in caso il materiale non sia quello corrente
Dim sMaterialList As New List(Of String)
Dim nIsActiveMaterial As Integer = 3
Dim bIsCurrentMaterial As Boolean = True
StdTemplateGetPrivateProfileListMaterial(S_CHAPTER & ChapterIndex, K_MATERIAL, sMaterialList, nIsActiveMaterial)
'For Each ItemMaterial In sMaterialList
' bIsCurrentMaterial = False
' Dim ArrayItemMaterial As String() = ItemMaterial.Split("/"c)
' If Trim(ArrayItemMaterial(0)) = Trim(Map.refHardwarePageVM.GenericPart.SelectedMaterial.NameDDF) Then
' bIsCurrentMaterial = True
' Exit For
' End If
'Next
IsCurrentMaterial(sMaterialList, bIsCurrentMaterial)
If Not bIsCurrentMaterial And nIsActive <> 4 Then
nIsActive = nIsActiveMaterial
End If
' verifico che non stia leggendo un nuovo hardware
If Not bNewHardware And nIsActive < 3 Then
nIsActive = 0
End If
Select Case nIsActive
Case 0
Chapter.SetIsFixed(False)
Chapter.SetIsActiveChapter(False)
Case 1
Chapter.SetIsFixed(False)
Chapter.SetIsActiveChapter(True)
Case 2
Chapter.SetIsFixed(True)
Chapter.SetIsActiveChapter(True)
Case 3
Chapter.SetIsFixed(False)
Chapter.SetIsActiveChapter(False)
Chapter.GroupVisibilityChapter = Visibility.Collapsed
Case 4
Chapter.SetIsFixed(False)
Chapter.SetIsActiveChapter(False)
Chapter.SetEnableChapter(bIsCurrentMaterial)
End Select
'' leggo se il capitolo appartiene al tipo di materiale ed eventualmente il tipo di visualizzazione da adoperare
'Dim sMaterialList As New List(Of String)
'StdTemplateGetPrivateProfileListMaterial(S_CHAPTER & ChapterIndex, K_MATERIAL, sMaterialList, nIsActive)
'For Each ItemMaterial In sMaterialList
' Chapter.GroupVisibilityChapter = Visibility.Collapsed
' Dim ArrayItemMaterial As String() = ItemMaterial.Split("/"c)
' If Trim(ArrayItemMaterial(0)) = Trim(Map.refHardwarePageVM.GenericPart.SelectedMaterial.NameDDF) Then
' Chapter.GroupVisibilityChapter = Visibility.Visible
' Exit For
' End If
'Next
While EgtUILib.GetPrivateProfileString(S_CHAPTER & ChapterIndex, K_PARAM & ParamIndex, "", sParam, m_StdTemplate) > 0 ' Verifico che esista il parametro nuovo "Param-ParamIndex"
If Not String.IsNullOrWhiteSpace(sParam) Then
Dim NewParam As New CompoParam(m_HardwareGeneral.DDFName, m_HardwareGeneral.Name, Chapter)
Dim sHelpParam As String = String.Empty
EgtUILib.GetPrivateProfileString(S_CHAPTER & ChapterIndex, "HelpParam" & ParamIndex, "", sHelpParam, m_StdTemplate)
' verifico se il materiale corrente deve essere visualizzato in funzione del materiale associato al parametro
Dim sMaterialParam As String = String.Empty
Dim MaterialParamList As New List(Of String)
Dim bIsCurrentMaterialParam As Boolean = True
Dim sDefaultGhostValue As String = ""
StdTemplateGetPrivateProfileListMaterialParam(S_CHAPTER & ChapterIndex, "MaterialParam" & ParamIndex, MaterialParamList, sDefaultGhostValue)
IsCurrentMaterial(MaterialParamList, bIsCurrentMaterialParam)
If Not bIsCurrentMaterialParam Then
' trasformo il parametro in Ghost
TrasformCurrParamInGhost(sParam, sDefaultGhostValue)
End If
' leggo il tipo di parametro, se la lettura va a buon fine la carico
If Chapter.ReadParamHardware(sParam, sHelpParam, NewParam, ErrorReading) Then Chapter.CompoParamList.Add(NewParam)
If TypeOf NewParam Is TextBoxOnOffParam Then
Dim Param = DirectCast(NewParam, TextBoxOnOffParam)
Param.SetIsActive(False)
ElseIf TypeOf NewParam Is ComboBoxParamLua Then
Dim Param As ComboBoxParamLua = DirectCast(NewParam, ComboBoxParamLua)
Param.ItemListDDF = RefreshListGeometry(Param.ItemListDDF)
Param.ItemList = RefreshListGeometry(Param.ItemList)
If Param.ItemList.Count > 0 Then
Param.SetSelItem(Param.ItemList(0))
Else
Param.SetSelItem("")
End If
ElseIf TypeOf NewParam Is ComboBoxOnOffParam Then
Dim Param = DirectCast(NewParam, ComboBoxOnOffParam)
Param.SetIsActive(False)
End If
End If
ParamIndex += 1
End While ' termina lettura del capitolo
GroupChapters.Add(Chapter)
ParamIndex = 1
ChapterIndex += 1
End While ' termina lettura della configurazione
' se la componente è di tipo frame allora esce
Dim LocalCompoMatch As Compo = CreateChapterMatching()
If Not IsNothing(LocalCompoMatch) AndAlso LocalCompoMatch.GroupVisibilityChapter = Visibility.Visible Then
LocalCompoMatch.SetIsFixed(True)
GroupChapters.Add(LocalCompoMatch)
End If
' se la componente lo prevede allora aggiungo
Dim LocalCompoMatchDoor As Compo = CreateChapterMatchingDoor()
If Not IsNothing(LocalCompoMatchDoor) AndAlso LocalCompoMatchDoor.GroupVisibilityChapter = Visibility.Visible Then
LocalCompoMatchDoor.SetIsFixed(True)
GroupChapters.Add(LocalCompoMatchDoor)
End If
End Sub
' recupera il l'elenco dei materiali indicati nella stringa e verifica se nell'elenco è presente il materiale attivo nella porta
Private Sub IsCurrentMaterial(sMaterialList As List(Of String), ByRef bIsCurrentMaterial As Boolean)
For Each ItemMaterial In sMaterialList
bIsCurrentMaterial = False
Dim ArrayItemMaterial As String() = ItemMaterial.Split("/"c)
If Trim(ArrayItemMaterial(0)) = Trim(Map.refHardwarePageVM.GenericPart.SelectedMaterial.NameDDF) Then
bIsCurrentMaterial = True
Exit For
End If
Next
End Sub
Private Sub TrasformCurrParamInGhost(ByRef sParamLine As String, ByVal sDefaultValue As String)
' separo la stringa
Dim sItems As String() = sParamLine.Split(";"c)
If sItems.Count > 2 Then
sItems(0) = "Ghost"
sItems(2) = sDefaultValue
End If
' riassemblo la stringa iniziale
sParamLine = Trim(sItems(0)) & "; " & Trim(sItems(1)) & "; " & Trim(sItems(2))
End Sub
' carico la liste dei nomi dei capitoli
Private Function SetGroupChaptername(sName As String) As Boolean
If m_GroupChapterName.Count = 0 Then m_GroupChapterName.Add(sName)
Dim bFounded As Boolean = False
For Index1 As Integer = 0 To m_GroupChapterName.Count - 1
If m_GroupChapterName(Index1) = sName Then
bFounded = True
Exit For
End If
Next
If Not bFounded Then m_GroupChapterName.Add(sName)
Return True
End Function
' elimina le liste di parametri precedenti ad ogni selezione
Public Sub ClearGroupChapters()
If Not IsNothing(GroupChapters) Then
GroupChapters.Clear()
End If
NotifyPropertyChanged("GroupChapters")
End Sub
' ricarico il file temporaneo
Public Sub RelaoadTempCurrHardwareFile()
ReadTemplate(CurrHardwareFilePath)
End Sub
' legge il file lua: verifica che il file esista e se necessario il tipo di versione (solo per le Lock)
Friend Function ReadTemplate(Optional ByVal sFile As String = "") As Boolean
' inizio la lettura del file lua selezionato
Dim FileContent() As String
Dim CurrItemPath As String = CurrPath()
Dim MatchingFile As String = String.Empty
Dim MatchingFileDoor As String = String.Empty
Dim Version As String = "2" ' 2 è la versione nuova, 1 la versione vecchia
Dim IsActiveVersion As Integer = 0
Dim MakeHole As Boolean = False
If StdTemplateGetPrivateProfileChapterVersioning("Versioning", "IsActive", IsActiveVersion) Then
Version = "1"
End If
If Not String.IsNullOrEmpty(sFile) Then
CurrItemPath = sFile
End If
If Not Path.HasExtension(CurrItemPath) Then
CurrItemPath &= LUA_EXTENSION
ElseIf Path.GetExtension(CurrItemPath).ToLower <> LUA_EXTENSION Then
CurrItemPath &= LUA_EXTENSION
End If
Dim ErrorMsg As String = String.Empty
' se il file ha estensione o se ha estensione nge: esco
If Path.GetExtension(CurrItemPath).ToLower = NGE_EXTENSION Then
' 50556=File has nge extension.
ErrorMsg = EgtMsg(50556)
Return False
End If
' file does not exists
If Not File.Exists(CurrItemPath) Then ErrorMsg = EgtMsg(50172) : Return False ' controllo che esiste il file altrimenti esco
FileContent = File.ReadAllLines(CurrItemPath)
' se il file esiste ma è vuoto
If FileContent.Count = 0 Then
MessageBox.Show(EgtMsg(50107), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
End If
' cerco la versione caricata
If IsActiveVersion = 1 Then
For Each Line In FileContent
Dim CurrLine As String = Utility.DeleteLuaComment(Line)
Dim sLine() As String = CurrLine.Split("="c)
If sLine.Count < 2 OrElse sLine.Count > 2 Then Continue For
If sLine(0).Contains(".VER") Then
If Not IsNothing(sLine(1)) AndAlso IsNumeric(sLine(1).Replace("'", "")) Then
Version = Trim(sLine(1).Replace("'", ""))
End If
Exit For
End If
Next
End If
Select Case Version
Case "2"
For IndexLine As Integer = 0 To FileContent.Count - 1
Dim CurrLine As String = Utility.DeleteLuaComment(FileContent(IndexLine))
Dim sLine() As String = CurrLine.Split("="c)
If sLine.Count < 2 OrElse sLine.Count > 2 Then Continue For
FindParamTemplateInConfigList(Trim(sLine(0)), Trim(sLine(1)))
Next
' nuova versione
Case "1"
' se è una lock
If m_HardwareGeneral.DDFName = "locks" Then
' cerco il Parametro mh per l'attivazione del foro
For Each Line In FileContent
Dim CurrLine As String = Utility.DeleteLuaComment(Line)
Dim sLine() As String = CurrLine.Split("="c)
If sLine.Count < 2 OrElse sLine.Count > 2 Then Continue For
If Trim(sLine(0)) = "tLkmPar.mh" Then
If Not IsNothing(sLine(1)) AndAlso Trim(sLine(1)) = "true" Then
MakeHole = True
End If
Exit For
End If
Next
For IndexLine As Integer = 0 To FileContent.Count - 1
Dim CurrLine As String = Utility.DeleteLuaComment(FileContent(IndexLine))
Dim sLine() As String = CurrLine.Split("="c)
If sLine.Count < 2 OrElse sLine.Count > 2 Then Continue For
FindParamTemplateInConfigListOldVersionLock(Trim(sLine(0)), Trim(sLine(1)), MakeHole)
Next
Return True
End If
For IndexLine As Integer = 0 To FileContent.Count - 1
Dim CurrLine As String = Utility.DeleteLuaComment(FileContent(IndexLine))
Dim sLine() As String = CurrLine.Split("="c)
If sLine.Count < 2 OrElse sLine.Count > 2 Then Continue For
FindParamTemplateInConfigList(Trim(sLine(0)), Trim(sLine(1)))
Next
End Select
For IndexName As Integer = 0 To m_GroupChapterName.Count - 1
CascadedChapter(m_GroupChapters, m_GroupChapterName(IndexName))
Next
' ricerco il nome dell'associazione Frame
MatchingFile = ReadMatchingFile(FileContent, K_MATCHING_FILE)
LoadMatchingFile(MatchingFile, MATCHING_FILE_TEMPLATE)
' ricerco il nome dell'associazione Door
MatchingFileDoor = ReadMatchingFile(FileContent, K_MATCHING_FILE_DOOR)
LoadMatchingFile(MatchingFileDoor, MATCHING_FILE_TEMPLATE_DOOR)
' carcio i valori di default della componente
ReadDefaultParamDDF(FileContent)
Return True
End Function
Private Function CascadedChapter(CompoList As ObservableCollection(Of Compo), sGroupName As String) As Boolean
' salvo l'indice del primo parametro visibile
Dim bLastVisible As Boolean = False
For Index As Integer = 0 To CompoList.Count - 1
If CompoList(Index).GroupNameChapter <> sGroupName Then Continue For
If CompoList(Index).IsActiveChapter Then
CompoList(Index).GroupVisibilityChapter = Visibility.Visible
ElseIf Not CompoList(Index).IsActiveChapter And Not bLastVisible Then
CompoList(Index).GroupVisibilityChapter = Visibility.Visible
bLastVisible = True
Else
CompoList(Index).GroupVisibilityChapter = Visibility.Collapsed
End If
Next
Return True
End Function
' caricamento dei dati del file lua
Private Function FindParamTemplateInConfigList(sParam As String, sValue As String) As Boolean
For IndexGroupChapters As Integer = 0 To m_GroupChapters.Count - 1
' verifico che sia attivo il gruppo
If Not m_GroupChapters(IndexGroupChapters).EnableChapter Then
Continue For
End If
For IndexChapter As Integer = 0 To m_GroupChapters(IndexGroupChapters).CompoParamList.Count - 1
If m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter).DDFName = sParam Then
' ho trovato una corrispondenza tra il valore de file ini e quello lua in lettura
' allora significa che tutto il capitolo associato deve essere attivo
Dim AcitvateParamNotExists As Boolean = True
For Each ItemParam In m_GroupChapters(IndexGroupChapters).CompoParamList
If TypeOf ItemParam Is ActivateParam Then
AcitvateParamNotExists = False
Exit For
End If
Next
If AcitvateParamNotExists Then m_GroupChapters(IndexGroupChapters).SetIsActiveChapter(True)
' m_GroupChapters(IndexGroupChapters).SetIsActiveChapter(True)
If TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxDGCParam Then
Dim Text As TextBoxDGCParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxDGCParam)
' se testo numerico, eseguo opportunbe conversioni per H,W e T
sValue = ConvertToDGD(Text.TypeVar, sValue)
' separare il valore tra parentesi dai termini fuoir parentesi
Dim sItems() As String = sValue.Split("+"c)
If sItems.Count > 2 Then
For IndexArray As Integer = 1 To sItems.Count - 2
sItems(0) &= "+" & sItems(IndexArray)
Next
sItems(1) = sItems(sItems.Count - 1)
End If
Dim sLen As String = Trim(Utility.GetMeasure(sItems(0)))
Dim dVal As Double = 0.0
Text.SetValue(sLen)
Text.SetConst(Text.ConstList(0))
If sItems.Count >= 2 Then
For IndexConst As Integer = 0 To Text.ConstList.Count - 1
If Text.ConstList(IndexConst) = Trim(sItems(1)) Then Text.SetConst(Text.ConstList(IndexConst)) : Exit For
Next
End If
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxThicknessParam Then
Dim Text As TextBoxThicknessParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxThicknessParam)
' se testo numerico, eseguo opportunbe conversioni per H,W e T
sValue = ConvertToDGD(Text.TypeVar, sValue)
Dim dVal As Double
Text.SetConst(Text.ConstList(2))
Text.SetValue("")
If StringToDouble(sValue, dVal) AndAlso dVal < 0.0 Then
For IndexItem As Integer = 0 To Text.ConstList.Count - 1
If Text.ConstList(IndexItem).dValue = dVal Then
Text.SetConst(Text.ConstList(IndexItem))
Exit For
End If
Next
End If
If Text.SelConst.Name = OptionModule.m_SelectedMeasureUnit Then
Dim sLen As String = Trim(Utility.GetMeasure(sValue))
Text.SetValue(sLen)
End If
' comunico che non c'è nessun tipo di errore nel valore caricato
m_GroupChapters(IndexGroupChapters).ErrorValue = False
m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter).NotifyPropertyChanged("ErrorParameter")
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxNgeParam Then
Dim Text As TextBoxNgeParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxNgeParam)
Text.SetValue(Trim(Utility.DeleteSuperScript(sValue)))
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxLuaParam Then
Dim Text As TextBoxLuaParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxLuaParam)
Text.SetValue(Trim(Utility.DeleteSuperScript(sValue)))
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxOnOffParam Then
Dim Text As TextBoxOnOffParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxOnOffParam)
' estraggo il valore: -- NomeParamOnOff = inch(0.6); 0
Dim sItems() As String = sValue.Split(";"c)
sValue = sItems(0)
' verifico se deve essere attivata
If sItems.Count > 1 Then
If sItems(1).Trim <> "0" Then
Text.SetIsActive(True)
Else
Text.SetIsActive(False)
End If
Else
Text.SetIsActive(True)
End If
' se testo numerico, eseguo opportunbe conversioni per H,W e T
sValue = ConvertToDGD(Text.TypeVar, sValue)
' controllo il tipo di dato che si aspetta
Select Case Text.TypeVar
Case ConstGen.INCHES
Dim sLen As String = Trim(Utility.GetMeasure(sValue))
Text.SetValue(sLen)
Case ConstGen.MM
Dim sLen As String = Trim(Utility.GetMeasure(sValue))
Text.SetValue(sLen)
Case ConstGen.VAL_DOUBLE
Dim dVal As Double = 0.0
If StringToDouble(sValue, dVal) Then Text.SetValue(sValue) Else Text.SetValue("0.000")
Case ConstGen.VAL_STRING
Text.SetValue(Trim(Utility.DeleteSuperScript(sValue)))
End Select
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxParam Then
Dim Text As TextBoxParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxParam)
' se testo numerico, eseguo opportunbe conversioni per H,W e T
sValue = ConvertToDGD(Text.TypeVar, sValue)
' controllo il tipo di dato che si aspetta
Select Case Text.TypeVar
Case ConstGen.INCHES
Dim sLen As String = Trim(Utility.GetMeasure(sValue))
Text.SetValue(sLen)
Case ConstGen.MM
Dim sLen As String = Trim(Utility.GetMeasure(sValue))
Text.SetValue(sLen)
Case ConstGen.VAL_DOUBLE
Dim dVal As Double = 0.0
If StringToDouble(sValue, dVal) Then Text.SetValue(sValue) Else Text.SetValue("0.000")
Case ConstGen.VAL_STRING
Text.SetValue(Trim(Utility.DeleteSuperScript(sValue)))
End Select
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is CheckBoxParam Then
Dim Text As CheckBoxParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), CheckBoxParam)
Text.SetIsChecked(Utility.ConvertCheckBox(sValue))
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is ComboBoxParamLua Then
Dim Text As ComboBoxParamLua = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), ComboBoxParamLua)
Text.ItemListDDF = RefreshListGeometry(Text.ItemListDDF)
Text.ItemList = RefreshListGeometry(Text.ItemList)
If Text.ItemList.Count > 0 Then Text.SetSelItem(Text.ItemList(0))
Dim bExistItem As Boolean = False
For IndexCombo As Integer = 0 To Text.ItemListDDF.Count - 1
If Trim(Utility.DeleteSuperScript(Text.ItemListDDF(IndexCombo))) = Trim(Utility.DeleteSuperScript(sValue)) Then Text.SetSelItem(Text.ItemList(IndexCombo)) : bExistItem = True
Next
' se non trovo nessuna corrispondenza allora segnalo un errore
If Not bExistItem Then
Text.ErrorInReading = True
' aggiungo all'elenco il nome sbagliato
Text.ItemList.Add(Trim(Utility.DeleteSuperScript(sValue)))
Text.ItemListDDF.Add(Trim(sValue))
Text.SetSelItem(Text.ItemList(Text.ItemList.Count - 1))
ErrorReading = ErrorReading & String.Format(EgtMsg(50564), m_GroupChapters(IndexGroupChapters).TemplateName, m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter).Name, sValue) & vbCrLf
End If
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is ComboBoxOnOffParam Then
Dim Text As ComboBoxOnOffParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), ComboBoxOnOffParam)
' estraggo il valore: -- NomeParamOnOff = inch(0.6); 0
Dim sItems() As String = sValue.Split(";"c)
sValue = sItems(0)
' verifico se deve essere attivata
If sItems.Count > 1 Then
If sItems(1).Trim <> "0" Then
Text.SetIsActive(True)
Else
Text.SetIsActive(False)
End If
Else
Text.SetIsActive(True)
End If
Text.SetSelItem(Text.ItemList(0))
For IndexCombo As Integer = 0 To Text.ItemListDDF.Count - 1
If Trim(Utility.DeleteSuperScript(Text.ItemListDDF(IndexCombo))) = Trim(Utility.DeleteSuperScript(sValue)) Then Text.SetSelItem(Text.ItemList(IndexCombo))
Next
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is ComboBoxParam Then
Dim Text As ComboBoxParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), ComboBoxParam)
Text.SetSelItem(Text.ItemList(0))
For IndexCombo As Integer = 0 To Text.ItemListDDF.Count - 1
If Trim(Utility.DeleteSuperScript(Text.ItemListDDF(IndexCombo))) = Trim(Utility.DeleteSuperScript(sValue)) Then Text.SetSelItem(Text.ItemList(IndexCombo))
Next
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is GhostParam Then
Dim Text As GhostParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), GhostParam)
Text.Value = sValue
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is ActivateParam Then
Dim Text As ActivateParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), ActivateParam)
Text.SetIsActivated(Utility.ConvertCheckBox(sValue))
m_GroupChapters(IndexGroupChapters).SetIsActiveChapter(Text.IsActivated)
End If
Return True
End If
Next
Next
Return False
End Function
Private Function RefreshListGeometry(ByRef GeometryList As ObservableCollection(Of String)) As ObservableCollection(Of String)
Dim CurrListGeomtry As New ObservableCollection(Of String)
If bIsFrame Then
For Each ItemGeomtry In GeometryList
If ItemGeomtry.ToLower.Contains("frame") Then
CurrListGeomtry.Add(ItemGeomtry)
End If
Next
Return CurrListGeomtry
End If
For Each ItemGeomtry In GeometryList
If Not ItemGeomtry.ToLower.Contains("frame") Then
CurrListGeomtry.Add(ItemGeomtry)
End If
Next
Return CurrListGeomtry
End Function
' restituisco la lista aggiornata delle geometrie
Public Function GetCurrentListGeometry(CompoType As String, NameParam As String) As ObservableCollection(Of String)
Dim sNameGeometry As String = String.Empty
Dim sErrorList As String = String.Empty
Dim ComboItemList As New ObservableCollection(Of String)
If Not CompoMatch.ReserchInTable(CompoType, NameParam, sNameGeometry) Then
' Error reading {0} param in {1} compo: no matching (look at GeometryNameList.ini) .
Dim sError As String = String.Format(EgtMsg(50502), NameParam, CompoType)
sErrorList = ConcatErrorString(sErrorList, sError)
Return ComboItemList
End If
Dim sComboItemList() As String = sNameGeometry.Split(","c)
For ItemIndex = 0 To sComboItemList.Count - 1
ComboItemList.Add(Trim(sComboItemList(ItemIndex)))
Next
Return RefreshListGeometry(ComboItemList)
End Function
' so già che il file contiene un foro al posto di una mortise
Private Function FindParamTemplateInConfigListOldVersionLock(sParam As String, sValue As String, MakeHole As Boolean) As Boolean
If MakeHole Then
Select Case sParam
Case "tLkmPar.L2"
sParam = ""
Case "tLkmPar.H2"
sParam = "tLkmPar.HB2"
Case "tLkmPar.T2"
sParam = "tLkmPar.TB2"
Case "tLkmPar.D_X"
sParam = "tLkmPar.DH_X"
Case "tLkmPar.LG2"
sParam = ""
Case "tLkmPar.LA"
sParam = ""
Case "tLkmPar.s"
sParam = ""
Case "tLkmPar.p2"
sParam = ""
Case "tLkmPar.d2"
sParam = ""
End Select
Else
Select Case sParam
Case "tLkmPar.LGH"
sParam = ""
End Select
End If
Return FindParamTemplateInConfigList(sParam, sValue)
End Function
' ricerco nel file .lua dell'hardware se esiste un'associazione
Private Function ReadMatchingFile(sFile() As String, sKey As String) As String
Dim LineIndex As Integer = 0
Dim ParamIndex As Integer = 1
Dim FrameFile As String = String.Empty
For LineIndex = 0 To sFile.Count - 1
If RegexFunction.IsMatchingParameterTitle(sFile(LineIndex)) Then
FrameFile = Trim(RegexFunction.ParamLine(sFile(LineIndex + ParamIndex), sKey))
While String.IsNullOrEmpty(FrameFile) And LineIndex + ParamIndex < sFile(LineIndex + ParamIndex).Count
ParamIndex += 1
FrameFile = Trim(RegexFunction.ParamLine(sFile(LineIndex + ParamIndex), sKey))
Exit For
End While
End If
Next
Return FrameFile
End Function
' legge e carica i parametri da settare nel ddf
Private Function ReadDefaultParamDDF(sFile() As String) As Boolean
Dim LineIndex As Integer = 0
Dim ParamIndex As Integer = 1
Dim KeyParam As String = String.Empty
Dim ValueParam As String = String.Empty
' inizio a leggere tutto il file lua
For LineIndex = 0 To sFile.Count - 1
' verifico che eista il titolo [DDF parameters]
If RegexFunction.IsDDFParameterTitle(sFile(LineIndex)) Then
For Each Item In GroupChapters
If Item.TemplateDDFName = "DDF" Then
' carico il nome di ogni parametro scritto nella configurazione
For Each ItemParam In Item.CompoParamList
' recupero il nome del parametro ddf scritto nel file lua
KeyParam = Trim(RegexFunction.KeyParamLine(sFile(LineIndex + ParamIndex)))
While String.IsNullOrEmpty(KeyParam) AndAlso KeyParam = ItemParam.DDFName And LineIndex + ParamIndex < sFile(LineIndex + ParamIndex).Count
ParamIndex += 1
KeyParam = Trim(RegexFunction.KeyParamLine(sFile(LineIndex + ParamIndex)))
End While
If String.IsNullOrEmpty(KeyParam) Then Continue For
ValueParam = RegexFunction.ParamLine(sFile(LineIndex + ParamIndex), KeyParam)
If String.IsNullOrEmpty(ValueParam) Then Continue For
FindParamTemplateInConfigList(KeyParam, ValueParam)
' passo alla riga successiva
LineIndex = LineIndex + ParamIndex
ParamIndex = 1
Next
End If
Next
End If
Next
Return True
End Function
' aggiorna la grafica (dato il nome del file) --> devo stampare gli errori
Private Function LoadMatchingFile(MatchingFile As String, sNameChapter As String) As Boolean
If String.IsNullOrEmpty(MatchingFile) Then Return False
For Each ItemChapter In m_GroupChapters
If ItemChapter.TemplateDDFName = sNameChapter Then
Dim ComboBoxMatch As ComboBoxParam = DirectCast(ItemChapter.CompoParamList(0), ComboBoxParam)
Dim sItem() As String = MatchingFile.Split("\"c)
' Hinge\StdMort.Frame\1_5s
If sItem.Count > 2 Then
For IndexCompoType As Integer = 0 To Map.refCompoPanelVM.CompoTypeList.Count - 1
If Path.GetFileName(Map.refCompoPanelVM.CompoTypeList(IndexCompoType).Path) = sItem(0) Then
' ricerco la radice del direttorio
For IndexParam As Integer = 0 To ComboBoxMatch.ItemListDDF.Count - 1
If ComboBoxMatch.ItemListDDF(IndexParam) = Map.refCompoPanelVM.CompoTypeList(IndexCompoType).DDFName Then
ComboBoxMatch.SetSelItem(ComboBoxMatch.ItemList(IndexParam))
Exit For
End If
Next
' se il caricamento è fallito (non son stati caricati anche gli altri campi) allora esco
If ItemChapter.CompoParamList.Count < 2 Then
MatchingFile = String.Empty
Exit For
End If
' ricerco il brand
Dim ComboBoxBrand As ComboBoxParam = DirectCast(ItemChapter.CompoParamList(1), ComboBoxParam)
For IndexBrand As Integer = 0 To ComboBoxBrand.ItemListDDF.Count - 1
If ComboBoxBrand.ItemListDDF(IndexBrand) = sItem(1) Then
ComboBoxBrand.SetSelItem(ComboBoxBrand.ItemListDDF(IndexBrand))
Exit For
End If
Next
' se non è stato trovato il brand corretto allora esco
If IsNothing(ComboBoxBrand.SelItem) Then
MatchingFile = String.Empty
Exit For
End If
' ricerco il file
Dim ComboBoxFile As ComboBoxParam = DirectCast(ItemChapter.CompoParamList(2), ComboBoxParam)
For IndexFile As Integer = 0 To ComboBoxFile.ItemListDDF.Count - 1
If ComboBoxFile.ItemListDDF(IndexFile) = sItem(2) Then
ComboBoxFile.SetSelItem(ComboBoxFile.ItemListDDF(IndexFile))
Exit For
End If
Next
If IsNothing(ComboBoxFile.SelItem) Then
MatchingFile = String.Empty
Exit For
End If
' termino le associazioni
Exit For
End If
Next
ElseIf MatchingFile <> "None" Then
' se non è corretta l'estensione allora svuoto il nome associato
MatchingFile = String.Empty
Else
For IndexParam As Integer = 0 To ComboBoxMatch.ItemListDDF.Count - 1
If ComboBoxMatch.ItemListDDF(IndexParam) = "None" Then
ComboBoxMatch.SetSelItem(ComboBoxMatch.ItemListDDF(IndexParam))
Exit For
End If
Next
End If
' se l'associazione è andata a buon fine allora esco, altrimenti continuo
If Not IsNothing(ComboBoxMatch.SelItem) Then Exit For
' "Automatic"
If String.IsNullOrEmpty(MatchingFile) Then
' cerco di associare con "Automatic"
For IndexParam As Integer = 0 To ComboBoxMatch.ItemListDDF.Count - 1
If ComboBoxMatch.ItemListDDF(IndexParam) = "Automatic" Then
ComboBoxMatch.SetSelItem(ComboBoxMatch.ItemListDDF(IndexParam))
Exit For
End If
Next
' se fallisce associo "None"
If IsNothing(ComboBoxMatch.SelItem) Then
For IndexParam As Integer = 0 To ComboBoxMatch.ItemListDDF.Count - 1
If ComboBoxMatch.ItemListDDF(IndexParam) = "None" Then
ComboBoxMatch.SetSelItem(ComboBoxMatch.ItemList(IndexParam))
Exit For
End If
Next
End If
ElseIf Trim(MatchingFile) = "None" Then
For IndexParam As Integer = 0 To ComboBoxMatch.ItemListDDF.Count - 1
If ComboBoxMatch.ItemListDDF(IndexParam) = "None" Then
ComboBoxMatch.SetSelItem(ComboBoxMatch.ItemList(IndexParam))
Exit For
End If
Next
End If
End If
Next
Return True
End Function
#End Region ' Caricamneto
#Region "Salvataggio, Duplica, Nuovo, Aggiorna"
Public Function Duplicate(sSelBrand As String, sTemplate As String) As Boolean
DoRefresh = False
If IsNothing(sTemplate) Then
' Missing name of the new template!
MessageBox.Show(EgtMsg(50174), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Exclamation)
Return False
End If
' ricostruico il percorso del file da dupicare
Dim OldDirPath As String = CurrPath()
' ricostruisco il nuovo file da creare
Dim ModelDir As String = String.Empty
If sSelBrand <> RegexFunction.ModelTemplate(m_HardwareGeneral.Path) Then ModelDir = sSelBrand & "\"
Dim CurrDirPath As String = m_HardwareGeneral.Path & "\" & ModelDir & sTemplate & LUA_EXTENSION
Dim IndexModel As Integer
Dim TemSelBrand As String = String.Empty
' carico la lista dei file presenti nel direttorio selezionato
Dim Temp_TemplateList As New ObservableCollection(Of String)
For IndexModel = 0 To m_HardwareGeneral.HardwareFolderList.Count - 1
If m_HardwareGeneral.HardwareFolderList(IndexModel).ModelDirGraphic = sSelBrand Then
TemSelBrand = m_HardwareGeneral.HardwareFolderList(IndexModel).ModelDirGraphic
Temp_TemplateList = m_HardwareGeneral.HardwareFolderList(IndexModel).ModelFileList
Exit For
End If
Next
' controllo se il nome è già presente nel direttorio selezionato
Dim bNameExist As Boolean = False
Dim IndexHardwList As Integer
For IndexHardwList = 0 To Temp_TemplateList.Count - 1
If Temp_TemplateList(IndexHardwList) = sTemplate Then
' se il nome è nella lista allora esco dal ciclo e rendo falsa la variabile bNameExist
bNameExist = True
Exit For
End If
bNameExist = False
Next
Dim MsgBoxResult As MessageBoxResult = MessageBoxResult.OK
' se il nome esite già nel direttorio selezionato
If bNameExist Then
' The file: {0} already exist in directory {1} . Do you want to overwrite it
Select Case MessageBox.Show(String.Format(EgtMsg(50175), sTemplate, sSelBrand), EgtMsg(50144), MessageBoxButton.YesNo, MessageBoxImage.Warning)
' decido di sovrescrivere il file esistente
Case MessageBoxResult.Yes
If CurrDirPath = OldDirPath Then
MsgBoxResult = MessageBoxResult.Yes
End If
' non eseguo nulla perchè il file è sempre se stesso!
' Return True
Case Else
' deicido di non sovrescrivere interrompo
Return False
End Select
End If
' se non esiste il file con questo nome
If Not MsgBoxResult = MessageBoxResult.Yes Then
' elimino ilnome dalla lista dei file (alla fine il nome verrà aggiunto ancora)
For IndexTempList As Integer = 0 To Temp_TemplateList.Count - 1
If Temp_TemplateList(IndexTempList) = sTemplate Then
Temp_TemplateList.RemoveAt(IndexTempList)
Exit For
End If
Next
' carico le variabili temporanee e aggiorno la grafica (lista dei file e Brand selezionato)
m_SelBrand = m_HardwareGeneral.HardwareFolderList(IndexModel)
TemplateList = Temp_TemplateList
NotifyPropertyChanged("TemplateList")
NotifyPropertyChanged("SelBrand")
' copio il file
Try
File.Copy(OldDirPath, CurrDirPath, True)
m_SelTemplate = sTemplate
Catch ex As System.IO.IOException
' 50190=Error in copying: {0}
MessageBox.Show(String.Format(EgtMsg(50190), ex.Message))
' interrompo la copia e la creazione
Return False
End Try
' aggiungo il nome alla lista
RefreshTemplateListEgtDOORCreator()
End If
'TemplateList.Add(sTemplate)
For IndexTempList As Integer = 0 To m_TemplateList.Count - 1
' aggiorno la grafica con il valore selzionato tra i template
If m_TemplateList(IndexTempList) = sTemplate Then SelTemplate = m_TemplateList(IndexTempList)
Next
' SetLayerName(sTemplate)
DoRefresh = True
Return True
End Function
Public Function NewHardware(sSelBrand As String, sTemplate As String, sType As TypeHardware) As Boolean
DoRefresh = False
' ricostruico il percorso del file nuovo
Dim ModelDir As String = String.Empty
ModelDir = String.Empty
If sSelBrand <> RegexFunction.ModelTemplate(m_HardwareGeneral.Path) Then ModelDir = sSelBrand & "\"
Dim CurrDirPath As String = m_HardwareGeneral.Path & "\" & ModelDir & sTemplate & LUA_EXTENSION
Dim IndexModel As Integer
Dim TemSelBrand As String = String.Empty
' carico la lista dei file presenti nel direttorio selezionato
Dim Temp_TemplateList As New ObservableCollection(Of String)
For IndexModel = 0 To m_HardwareGeneral.HardwareFolderList.Count - 1
If m_HardwareGeneral.HardwareFolderList(IndexModel).ModelDirGraphic = sSelBrand Then
TemSelBrand = m_HardwareGeneral.HardwareFolderList(IndexModel).ModelDirGraphic
Temp_TemplateList = m_HardwareGeneral.HardwareFolderList(IndexModel).ModelFileList
Exit For
End If
Next
' controllo se il nome è già presente nel direttorio selezionato
Dim bNameExist As Boolean = False
Dim IndexHardwList As Integer
For IndexHardwList = 0 To Temp_TemplateList.Count - 1
If Temp_TemplateList(IndexHardwList) = sTemplate Then
' se il nome è nella lista allora esco dal ciclo e rendo falsa la variabile bNameExist
bNameExist = True
Exit For
End If
bNameExist = False
Next
' se il nome esite già nel direttorio selezionato
If bNameExist Then
' The file: {0} already exist in directory {1} . Do you want to overwrite it
Select Case MessageBox.Show(String.Format(EgtMsg(50175), sTemplate, sSelBrand), EgtMsg(50144), MessageBoxButton.YesNo, MessageBoxImage.Warning)
' decido di sovrescrivere il file esistente
Case MessageBoxResult.Yes
If File.Exists(CurrDirPath) Then
Try
' elimino il file
File.Delete(CurrDirPath)
Catch ex As FileNotFoundException
' non è un problema
Catch ex As Exception
' non è un problema
End Try
End If
Case Else
' deicido di non sovrescrivere interrompo
Return False
End Select
End If
' elimino il nome dalla lista dei file (alla fine il nome verrà aggiunto ancora)
For IndexTempList As Integer = 0 To Temp_TemplateList.Count - 1
If Temp_TemplateList(IndexTempList) = sTemplate Then
Temp_TemplateList.RemoveAt(IndexTempList)
Exit For
End If
Next
' carico le variabili temporanee e aggiorno la grafica (lista dei file e Brand selezionato)
bNewHardware = True
SelBrand = m_HardwareGeneral.HardwareFolderList(IndexModel)
TemplateList = Temp_TemplateList
SelType = sType
NotifyPropertyChanged("TemplateList")
NotifyPropertyChanged("SelBrand")
' ripulisco la lista da eventuali residui di altri Hardware
ClearGroupChapters()
' rileggo le component dell'hardware da StdTemplate
ReadChapterTemplate()
' salvo il nome del file corrente nel Layer
SetLayerName(sTemplate)
bNewHardware = False
Dim ErrorMsg As String = String.Empty
Dim NewFileContent As New ObservableCollection(Of String)
If Not ReadFile(NewFileContent) Then Return False
' scrivo tutto sul file corrente
Try
File.WriteAllLines(CurrDirPath, NewFileContent)
Catch ex As System.IO.IOException
' Error in copying:
MessageBox.Show(String.Format(EgtMsg(50176), ex.Message))
Return False
End Try
Map.refProjectManagerHardwareVM.IsModified = False
RefreshTemplateListEgtDOORCreator()
'TemplateList.Add(sTemplate)
For IndexTempList As Integer = 0 To m_TemplateList.Count - 1
' aggiorno la grafica con il valore selzionato tra i template
If m_TemplateList(IndexTempList) = sTemplate Then SelTemplate = m_TemplateList(IndexTempList)
Next
DoRefresh = True
Return True
End Function
' nel caso di creazione di nuovo Hardware questa funzione attribuisce il nome del file al parametro Nome (quello usato dal layer)
Public Function SetLayerName(sTemplateName As String) As Boolean
For Each Compo In m_GroupChapters
For Each Param In Compo.CompoParamList
If Param.DDFName.Contains("Nome") And TypeOf Param Is TextBoxParam Then
Dim Text As TextBoxParam = DirectCast(Param, TextBoxParam)
Dim LayerName = String.Empty
If Not String.IsNullOrWhiteSpace(sTemplateName) Then
LayerName = Path.GetFileName(sTemplateName)
If Not String.IsNullOrWhiteSpace(LayerName) Then
Text.SetValue(Trim(LayerName))
Else
Text.SetValue(Trim(sTemplateName))
End If
End If
Return True
End If
Next
Next
Return False
End Function
' per caricare a video il nome del file nge
Public Function SetGeometryName(sGeometryName As String) As Boolean
For Each Compo In m_GroupChapters
For Each Param In Compo.CompoParamList
If Param.DDFName.Contains(".CGF") And TypeOf Param Is TextBoxNgeParam Then
Dim Text As TextBoxNgeParam = DirectCast(Param, TextBoxNgeParam)
Text.SetValue(Trim(sGeometryName))
Return True
End If
Next
Next
Return False
End Function
' per caricare a video il nome del file nge
Public Function GetGeometryName() As String
For Each Compo In m_GroupChapters
For Each Param In Compo.CompoParamList
If Param.DDFName.Contains(".CGF") And TypeOf Param Is TextBoxNgeParam Then
Dim Text As TextBoxNgeParam = DirectCast(Param, TextBoxNgeParam)
If String.IsNullOrEmpty(Text.Value) Then
Return ""
Else
Return Text.Value
End If
End If
Next
Next
Return ""
End Function
' per caricare a video il nome del file lua
Public Function SetLuaFileInAggregate(sLuaFile As String, ByVal sDDFParam As String) As Boolean
If String.IsNullOrWhiteSpace(sDDFParam) Then sDDFParam = ".Name"
For Each Compo In m_GroupChapters
For Each Param In Compo.CompoParamList
If Param.DDFName.Contains(sDDFParam) And TypeOf Param Is TextBoxLuaParam Then
Dim Text As TextBoxLuaParam = DirectCast(Param, TextBoxLuaParam)
Text.SetValue(Trim(sLuaFile))
End If
Next
Next
Return False
End Function
Public Function DuplicateGeometryName(OldTemplateName As String) As Boolean
Dim OldGeometryName As String = String.Empty
Dim NewGeometryName As String = String.Empty
If String.IsNullOrWhiteSpace(OldTemplateName) OrElse Not File.Exists(OldTemplateName) Then Return False
Dim FileContent() As String = File.ReadAllLines(OldTemplateName)
For Each Line In FileContent
Dim CurrLine As String = Utility.DeleteLuaComment(Line)
Dim sLine() As String = CurrLine.Split("="c)
If sLine.Count < 2 OrElse sLine.Count > 2 Then Continue For
If Not Trim(sLine(0)).Contains(".CGF") Then Continue For
OldGeometryName = Path.GetDirectoryName(OldTemplateName) & "\" & Trim(sLine(1).Replace("'", ""))
If Not File.Exists(OldGeometryName) Then Return False
NewGeometryName = CopyGeometryName(OldTemplateName, OldGeometryName)
Try
File.Copy(OldGeometryName, NewGeometryName, True)
Catch ex As System.IO.IOException
' Error in copying:
MessageBox.Show(String.Format(EgtMsg(50176), ex.Message))
' interrompo la copia e la creazione
Return False
End Try
Exit For
Next
For Each Compo In m_GroupChapters
For Each Param In Compo.CompoParamList
If Param.DDFName.Contains(".CGF") And TypeOf Param Is TextBoxNgeParam Then
Dim Text As TextBoxNgeParam = DirectCast(Param, TextBoxNgeParam)
If Not String.IsNullOrEmpty(Text.Value) Then
Text.SetValue(Path.GetFileName(NewGeometryName))
Return RefreshTempHardware()
Else
Text.SetValue("")
Return RefreshTempHardware()
End If
End If
Next
Next
Return False
End Function
' duplica i nomi dei file presenti nel file
Public Function DuplicateFileLuaInAggreagate(OldTemplateName As String) As Boolean
Dim OldFileLuaName As String = String.Empty
Dim NewFileLuaName As String = String.Empty
If String.IsNullOrWhiteSpace(OldTemplateName) OrElse Not File.Exists(OldTemplateName) Then Return False
Dim FileContent() As String = File.ReadAllLines(OldTemplateName)
For Each Line In FileContent
Dim CurrLine As String = Utility.DeleteLuaComment(Line)
Dim sLine() As String = CurrLine.Split("="c)
If sLine.Count < 2 OrElse sLine.Count > 2 Then Continue For
If Not Trim(sLine(0)).Contains(".Name") Then Continue For
OldFileLuaName = Path.GetDirectoryName(OldTemplateName) & "\" & Trim(sLine(1).Replace("'", ""))
If Not File.Exists(OldFileLuaName) Then Return False
NewFileLuaName = CopyGeometryName(OldTemplateName, OldFileLuaName)
Try
File.Copy(OldFileLuaName, NewFileLuaName, True)
Catch ex As System.IO.IOException
' Error in copying:
MessageBox.Show(String.Format(EgtMsg(50176), ex.Message))
' interrompo la copia e la creazione
Return False
End Try
For Each Compo In m_GroupChapters
For Each Param In Compo.CompoParamList
If Param.DDFName.Contains(Trim(sLine(0))) And TypeOf Param Is TextBoxLuaParam Then
Dim Text As TextBoxLuaParam = DirectCast(Param, TextBoxLuaParam)
If Not String.IsNullOrEmpty(Text.Value) Then
Text.SetValue(Path.GetFileName(NewFileLuaName))
RefreshTempHardware()
Else
Text.SetValue("")
RefreshTempHardware()
End If
End If
Next
Next
Next
Return False
End Function
Private Function CopyGeometryName(OldTemplateName As String, OldGeometryName As String) As String
Dim CurrDir As String = Path.GetDirectoryName(Me.CurrPath)
Dim OldFileName As String = Path.GetFileName(OldGeometryName)
If OldFileName.Contains(Path.GetFileNameWithoutExtension(OldTemplateName)) Then
Return CurrDir & "\" & OldFileName.Replace(Path.GetFileNameWithoutExtension(OldTemplateName), Path.GetFileNameWithoutExtension(Me.m_SelTemplate))
Else
Return CurrDir & "\" & Me.m_SelTemplate & "_" & OldFileName
End If
Return String.Empty
End Function
' crea il file temporaneao e scrive i valori dei parametri della componente per aggiornare la parte grafica
Public Function RefreshTempHardware() As Boolean
Dim ErrorMsg As String = String.Empty
' Pulisco da componenti precedenti
Map.refHardwarePageVM.GenericPart.CompoList.Clear()
If String.IsNullOrWhiteSpace(Map.refHardwarePageVM.CurrHardware.SelTemplate) Then Return False
Dim NewFileContent As New ObservableCollection(Of String)
If Not ReadFile(NewFileContent) Then Return False
' costruisco il nome del percorso del file corrente
Dim ModelDir As String = String.Empty
' costruisco il percorso del file temporaneo nella cartella corrente:
Dim CurrDirectoryInModelDir As String = Path.GetDirectoryName(Map.refHardwarePageVM.CurrHardware.SelTemplate)
CurrDirectoryInModelDir = Trim(CurrDirectoryInModelDir.Replace(m_HardwareGeneral.Path, ""))
If m_SelBrand.ModelDir <> m_HardwareGeneral.Path Then ModelDir = m_SelBrand.ModelDirGraphic & "\"
If Not String.IsNullOrWhiteSpace(CurrDirectoryInModelDir) Then ModelDir = ModelDir & CurrDirectoryInModelDir & "\"
Dim sTempFileHardw As String = m_HardwareGeneral.Path & "\" & ModelDir & TEMP_FILE_HARDWARE
' salvo il file
File.WriteAllLines(sTempFileHardw, NewFileContent)
' salvo eventuale file associato luae
Dim sLuaeFile As String = m_HardwareGeneral.Path & "\" & ModelDir & Map.refHardwarePageVM.CurrHardware.SelTemplate & ".luae"
If File.Exists(sLuaeFile) Then File.Copy(sLuaeFile, sTempFileHardw & "e")
' aggiungo la componente
Map.refHardwarePageVM.GenericPart.AddNewHardware(m_HardwareGeneral, ModelDir & Path.GetFileNameWithoutExtension(TEMP_FILE_HARDWARE))
CurrHardwareFilePath = sTempFileHardw
If bIsFrame Then
FindSideJamb()
End If
Return True
End Function
Public Function Save() As Boolean
Dim ErrorMsg As String = String.Empty
' costruisco la Path del template da leggere
Dim TemplFile = m_HardwareGeneral.Path & "\" & m_SelType.Name & ".templ "
If Not File.Exists(TemplFile) Then Return False
Dim FileContent() As String = File.ReadAllLines(TemplFile)
Dim NewFileContent As New ObservableCollection(Of String)
If Not ReadFile(NewFileContent) Then Return False
' costruisco il nome del percorso del file corrente
Dim CurrConfig As String = m_HardwareGeneral.Path & "\" & CONFIGINI_FILE_NAME
Dim CurrItemPath As String = CurrPath()
' salvo il file
File.WriteAllLines(CurrItemPath, NewFileContent)
'RefreshTemplateListEgtDOORCreator()
Map.refProjectManagerHardwareVM.IsModified = False
Map.refSceneManagerVM.RefreshBtn()
Return True
End Function
Private Function ReadFile(ByRef NewFileContent As ObservableCollection(Of String)) As Boolean
For IndexName As Integer = 0 To m_GroupChapterName.Count - 1
CascadedChapter(m_GroupChapters, m_GroupChapterName(IndexName))
Next
Dim TemplFile = m_HardwareGeneral.Path & "\" & m_SelType.Name & ".templ "
If Not File.Exists(TemplFile) Then Return False
Dim FileContent() As String = File.ReadAllLines(TemplFile)
' inizio la lettura riga per riga
For IndexLine As Integer = 0 To FileContent.Count - 1
NewFileContent.Add(FileContent(IndexLine))
WriteLuaCommentParamDDF(FileContent, IndexLine, NewFileContent)
Dim CurrLine As String = Utility.DeleteLuaComment(FileContent(IndexLine))
Dim sLine() As String = CurrLine.Split("="c)
If sLine.Count < 2 OrElse sLine.Count > 2 Then Continue For ' significa che non è un parametro
Dim sValue As String = Trim(sLine(1))
Dim sTemplValue As String = Trim(sLine(1))
If Not ConvertValueForLua(sValue) Then
Continue For
End If
FileContent(IndexLine) = FileContent(IndexLine).Replace(sTemplValue, sValue)
NewFileContent.RemoveAt(NewFileContent.Count - 1)
If Not sValue = " nil" Then
NewFileContent.Add(FileContent(IndexLine))
End If
Next
If IsNothing(NewFileContent) Then Return False
Return True
End Function
Private Function WriteLuaCommentParamDDF(sFile() As String, ByRef LineIndex As Integer, ByRef NewFileContent As ObservableCollection(Of String)) As Boolean
Dim ParamIndex As Integer = 0
Dim KeyParam As String = String.Empty
Dim sValue As String = String.Empty
' verifico che esiste il titolo da stempare
If RegexFunction.IsDDFParameterTitle(sFile(LineIndex)) Then
ParamIndex = 1
' conto il numero di parametri ddf
Dim IndexParamDDF As Integer = 0
For Each ItemChapetr In GroupChapters
If ItemChapetr.TemplateDDFName = "DDF" Then
IndexParamDDF = ItemChapetr.CompoParamList.Count
Exit For
End If
Next
' cerco un numero finito di parametri
For IndexParam As Integer = 0 To IndexParamDDF - 1
If LineIndex + ParamIndex > sFile.Count - 1 Then Return False
' recupero il nome del parametro
KeyParam = Trim(RegexFunction.KeyParamLine(sFile(LineIndex + ParamIndex)))
While String.IsNullOrEmpty(KeyParam) And LineIndex + ParamIndex < sFile(LineIndex + ParamIndex).Count
ParamIndex += 1
KeyParam = Trim(RegexFunction.KeyParamLine(sFile(LineIndex + ParamIndex)))
End While
If String.IsNullOrEmpty(KeyParam) Then Continue For
sValue = RegexFunction.ParamLine(sFile(LineIndex + ParamIndex), KeyParam)
Dim ReplaceValue = sValue
ConvertValueForLua(sValue)
sFile(LineIndex + ParamIndex) = sFile(LineIndex + ParamIndex).Replace(ReplaceValue, sValue)
If Not sValue = " nil" Then
NewFileContent.Add(sFile(LineIndex + ParamIndex))
End If
LineIndex = LineIndex + ParamIndex
Next
End If
Return True
End Function
Public Function RefreshTemplateListEgtDOORCreator() As Boolean
ReLoading = True
For IndexHardw As Integer = 0 To Map.refCompoPanelVM.CompoTypeList.Count - 1
If m_HardwareGeneral.DDFName = Map.refCompoPanelVM.CompoTypeList(IndexHardw).DDFName Then
' entro nella cartella della componente selezionata e ricarico le liste dei Brand
Map.refCompoPanelVM.CompoTypeList(IndexHardw).LoadListTemplate()
For Each ItemCompo In Map.refCompoPanelHardwareVM.CompoTypeList
If ItemCompo.DDFName = Map.refCompoPanelVM.CompoTypeList(IndexHardw).DDFName Then
ItemCompo.LoadListTemplate()
End If
Next
' carico l'elnco delle cartelle Frame
m_HardwareGeneral.FrameFolderList = Map.refCompoPanelVM.CompoTypeList(IndexHardw).FrameFolderList
' devo ricaricare tutte le liste!
m_HardwareGeneral.HardwareFolderList = Map.refCompoPanelVM.CompoTypeList(IndexHardw).HardwareFolderList
If m_HardwareGeneral.HardwareFolderList.Count = 0 Then
Dim CurrFolder = New CompoBrandDir(m_HardwareGeneral.Path, Path.GetFileName(m_HardwareGeneral.Path))
m_HardwareGeneral.HardwareFolderList.Add(CurrFolder)
End If
NotifyPropertyChanged("BrandList")
For Each Item In BrandList
If m_LastDirectory.ModelDir = Item.ModelDir Then
SelBrand = Item
NotifyPropertyChanged("BrandList")
NotifyPropertyChanged("SelBrand")
Exit For
End If
Next
ReLoading = False
Return True
Exit For
End If
Next
ReLoading = False
Return False
End Function
' dato il nome del parametri sostiuisce il valore da stampare
Public Function ConvertValueForLua(ByRef sValue As String) As Boolean
Dim bIsActive As Boolean = True
Dim NameParam = Utility.FindNameParam(sValue)
If String.IsNullOrEmpty(NameParam) Then Return False
If NameParam = K_MATCHING_FILE Then
For IndexGroupChapters As Integer = 0 To m_GroupChapters.Count - 1
If m_GroupChapters(IndexGroupChapters).TemplateDDFName = MATCHING_FILE_TEMPLATE Then
sValue = String.Empty
If DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(0), ComboBoxParam).SelItem = MATCHING_FILE_AUTOMATIC Then
sValue = String.Empty
Return True
ElseIf DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(0), ComboBoxParam).SelItem = MATCHING_FILE_NONE Then
sValue = MATCHING_FILE_NONE
Return True
End If
For Each Item In Map.refCompoPanelVM.CompoTypeList
If Item.Name = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(0), ComboBoxParam).SelItem Then
sValue &= Path.GetFileName(Item.Path)
Exit For
End If
Next
If m_GroupChapters(IndexGroupChapters).CompoParamList.Count > 2 Then
sValue &= "\" & DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(1), ComboBoxParam).SelItem
sValue &= "\" & DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(2), ComboBoxParam).SelItem
Return True
End If
End If
Next
Return False
End If
If NameParam = K_MATCHING_FILE_DOOR Then
For IndexGroupChapters As Integer = 0 To m_GroupChapters.Count - 1
If m_GroupChapters(IndexGroupChapters).TemplateDDFName = MATCHING_FILE_TEMPLATE_DOOR Then
sValue = String.Empty
If DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(0), ComboBoxParam).SelItem = MATCHING_FILE_AUTOMATIC Then
sValue = String.Empty
Return True
ElseIf DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(0), ComboBoxParam).SelItem = MATCHING_FILE_NONE Then
sValue = MATCHING_FILE_NONE
Return True
End If
For Each Item In Map.refCompoPanelVM.CompoTypeList
If Item.Name = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(0), ComboBoxParam).SelItem Then
sValue &= Path.GetFileName(Item.Path)
Exit For
End If
Next
If m_GroupChapters(IndexGroupChapters).CompoParamList.Count > 2 Then
sValue &= "\" & DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(1), ComboBoxParam).SelItem
sValue &= "\" & DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(2), ComboBoxParam).SelItem
Return True
End If
End If
Next
Return False
End If
For IndexGroupChapters As Integer = 0 To m_GroupChapters.Count - 1
' se il presente gruppo non è attivo passo al successivo (di default assegno "nil", in caso di uscita senza gruppo il valore
If Not m_GroupChapters(IndexGroupChapters).EnableChapter Then
sValue = " nil"
Continue For
End If
For IndexChapter As Integer = 0 To m_GroupChapters(IndexGroupChapters).CompoParamList.Count - 1
If m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter).DDFName = NameParam Then
' verifico che il parametro da stampare sia abilitato alla stampa (altriementi NON scrivere nel file)
If Not m_GroupChapters(IndexGroupChapters).IsActiveChapter Then sValue = " nil" : Return True
If TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxDGCParam Then
Dim Text As TextBoxDGCParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxDGCParam)
sValue = String.Empty
Select Case Text.TypeVar
Case ConstGen.INCHES
If OptionModule.m_SelectedMeasureUnit = ConstGen.VAL_INCHES Then
If Text.ToolTipValue.Contains("Invalid") Then
sValue = "0.0000"
Else
'sValue = Text.TypeVar & "( " & Text.Value & ")"
sValue = "inch( " & Text.Value & ")"
End If
Else
sValue = Text.Value
'If MmToInches(sValue) Then sValue = Text.TypeVar & "( " & sValue & ")"
sValue = "mm( " & sValue & ")"
End If
Case ConstGen.MM
If OptionModule.m_SelectedMeasureUnit = ConstGen.VAL_INCHES Then
sValue = Text.Value
InchesToMm(sValue)
'sValue = Text.TypeVar & "( " & sValue & ")"
sValue = "inch( " & sValue & ")"
Else
If Text.ToolTipValue.Contains("Invalid") Then
sValue = "0.0000"
Else
'sValue = Text.Value
'sValue = Text.TypeVar & "( " & Text.Value & ")"
sValue = "mm( " & Text.Value & ")"
End If
End If
End Select
' se testo numerico, eseguo opportune conversioni per H,W e T
sValue = ConvertFromDGD(Text.TypeVar, sValue)
sValue &= " + " & Text.SelConst
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxThicknessParam Then
Dim Text As TextBoxThicknessParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxThicknessParam)
sValue = String.Empty
If Text.SelConst.dValue = 0 Then
Select Case Text.TypeVar
Case ConstGen.INCHES
If OptionModule.m_SelectedMeasureUnit = ConstGen.VAL_INCHES Then
If Text.ToolTipValue.Contains("Invalid") Then
sValue = "0.0000"
Else
'sValue = Text.TypeVar & "( " & Text.Value & ")"
sValue = "inch( " & Text.Value & ")"
End If
Else
sValue = Text.Value
'If MmToInches(sValue) Then sValue = Text.TypeVar & "( " & sValue & ")"
sValue = "mm( " & sValue & ")"
End If
Case ConstGen.MM
If OptionModule.m_SelectedMeasureUnit = ConstGen.VAL_INCHES Then
sValue = Text.Value
InchesToMm(sValue)
'sValue = Text.TypeVar & "( " & sValue & ")"
sValue = "inch( " & sValue & ")"
Else
If Text.ToolTipValue.Contains("Invalid") Then
sValue = "0.0000"
Else
'sValue = Text.Value
'sValue = Text.TypeVar & "( " & Text.Value & ")"
sValue = "mm( " & Text.Value & ")"
End If
End If
End Select
' se testo numerico, eseguo opportune conversioni per H,W e T
sValue = ConvertFromDGD(Text.TypeVar, sValue)
Return True
End If
sValue = DoubleToString(Text.SelConst.dValue, 1)
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxNgeParam Then
Dim Text As TextBoxNgeParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxNgeParam)
sValue = String.Empty
sValue = "'" & Text.Value & "'"
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxLuaParam Then
Dim Text As TextBoxLuaParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxLuaParam)
sValue = String.Empty
sValue = "'" & Text.Value & "'"
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxOnOffParam Then
Dim Text As TextBoxOnOffParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxOnOffParam)
sValue = String.Empty
' controllo il tipo di dato che si aspetta
Select Case Text.TypeVar
Case ConstGen.INCHES
If OptionModule.m_SelectedMeasureUnit = ConstGen.VAL_INCHES Then
If Text.ToolTipValue.Contains("Invalid") Then
sValue = "0.0000"
Else
'sValue = Text.TypeVar & "( " & Text.Value & ")"
sValue = "inch( " & Text.Value & ")"
End If
'sValue = Text.TypeVar & "( " & Text.ToolTipValue & ")"
Else
sValue = Text.Value
'If MmToInches(sValue) Then sValue = Text.TypeVar & "( " & sValue & ")"
sValue = "mm( " & sValue & ")"
End If
Case ConstGen.MM
If OptionModule.m_SelectedMeasureUnit = ConstGen.VAL_INCHES Then
sValue = Text.Value
InchesToMm(sValue)
'sValue = Text.TypeVar & "( " & sValue & ")"
sValue = "inch( " & sValue & ")"
Else
If Text.ToolTipValue.Contains("Invalid") Then
sValue = "0.0000"
Else
'sValue = Text.Value
'sValue = Text.TypeVar & "( " & Text.Value & ")"
sValue = "mm( " & Text.Value & ")"
End If
'sValue = Text.ToolTipValue
End If
Case ConstGen.VAL_DOUBLE
sValue = Text.Value
Case ConstGen.VAL_STRING
sValue = "'" & Text.Value & "'"
End Select
' se testo numerico, eseguo opportune conversioni per H,W e T
sValue = ConvertFromDGD(Text.TypeVar, sValue)
' se parametro spento (Solo per capitolo DDF)
If Not Text.IsActive Then
If m_GroupChapters(IndexGroupChapters).TemplateDDFName = "DDF" Then
sValue &= "; 0"
Else
' per inidicare di spegnere il valore deve essere restituito il valore " nill"
sValue = " nil"
End If
End If
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxParam Then
Dim Text As TextBoxParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxParam)
sValue = String.Empty
' controllo il tipo di dato che si aspetta
Select Case Text.TypeVar
Case ConstGen.INCHES
If OptionModule.m_SelectedMeasureUnit = ConstGen.VAL_INCHES Then
If Text.ToolTipValue.Contains("Invalid") Then
sValue = "0.0000"
Else
'sValue = Text.TypeVar & "( " & Text.Value & ")"
sValue = "inch( " & Text.Value & ")"
End If
'sValue = Text.TypeVar & "( " & Text.ToolTipValue & ")"
Else
sValue = Text.Value
'If MmToInches(sValue) Then sValue = Text.TypeVar & "( " & sValue & ")"
sValue = "mm( " & Text.Value & ")"
End If
Case ConstGen.MM
If OptionModule.m_SelectedMeasureUnit = ConstGen.VAL_INCHES Then
sValue = Text.Value
InchesToMm(sValue)
'sValue = Text.TypeVar & "( " & sValue & ")"
sValue = "inch( " & Text.Value & ")"
Else
If Text.ToolTipValue.Contains("Invalid") Then
sValue = "0.0000"
Else
'sValue = Text.Value
'sValue = Text.TypeVar & "( " & Text.Value & ")"
sValue = "mm( " & Text.Value & ")"
End If
'sValue = Text.ToolTipValue
End If
Case ConstGen.VAL_DOUBLE
sValue = Text.Value
Case ConstGen.VAL_STRING
sValue = "'" & Text.Value & "'"
End Select
' se testo numerico, eseguo opportune conversioni per H,W e T
sValue = ConvertFromDGD(Text.TypeVar, sValue)
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is TextBoxNgeParam Then
Dim Text As TextBoxNgeParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), TextBoxNgeParam)
sValue = "'" & Text.Value & "'"
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is CheckBoxParam Then
Dim Text As CheckBoxParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), CheckBoxParam)
sValue = String.Empty
If Text.IsChecked Then sValue = " true" Else sValue = " false"
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is ActivateParam Then
Dim Text As ActivateParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), ActivateParam)
sValue = String.Empty
If Text.IsActivated Then sValue = " true" Else sValue = " false"
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is ComboBoxParamLua Then
Dim Text As ComboBoxParamLua = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), ComboBoxParamLua)
sValue = String.Empty
For Index As Integer = 0 To Text.ItemList.Count - 1
If Text.SelItem = Text.ItemList(Index) Then sValue = Text.ItemListDDF(Index) : Return True
Next
sValue = Text.SelItem
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is ComboBoxOnOffParam Then
'-- attenzione a quando abbiamo da stampare delle stringhe! e non dei valori numerici
Dim Text As ComboBoxOnOffParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), ComboBoxOnOffParam)
sValue = String.Empty
For Index As Integer = 0 To Text.ItemList.Count - 1
If Text.SelItem = Text.ItemList(Index) Then sValue = Text.ItemListDDF(Index)
Next
If String.IsNullOrEmpty(sValue) Then
sValue = Text.SelItem
End If
' se parametro spento
If Not Text.IsActive Then
If m_GroupChapters(IndexGroupChapters).TemplateDDFName = "DDF" Then
sValue &= "; 0"
Else
' per inidicare di spegnere il valore deve essere restituito il valore " nill"
sValue = " nil"
End If
End If
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is ComboBoxParam Then
'-- attenzione a quando abbiamo da stampare delle stringhe! e non dei valori numerici
Dim Text As ComboBoxParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), ComboBoxParam)
sValue = String.Empty
For Index As Integer = 0 To Text.ItemList.Count - 1
If Text.SelItem = Text.ItemList(Index) Then sValue = Text.ItemListDDF(Index) : Return True
Next
sValue = Text.SelItem
Return True
ElseIf TypeOf m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter) Is GhostParam Then
Dim Text As GhostParam = DirectCast(m_GroupChapters(IndexGroupChapters).CompoParamList(IndexChapter), GhostParam)
sValue = Text.Value
Return True
End If
End If
Next
Next
Return True
End Function
' lista delle riposte della funzione SaveControl
Enum SaveResult As Integer
nYes
nNo
nCancel
End Enum
' restituisce il messaggio della selezione
Public Function SaveControl() As SaveResult
If ReLoading Then Return SaveResult.nYes
If Not Map.refProjectManagerHardwareVM.IsModified Then Return SaveResult.nNo
' Do you want to save the current changes?
Select Case MessageBox.Show(EgtMsg(50177), "", MessageBoxButton.YesNoCancel, MessageBoxImage.Question)
Case MessageBoxResult.Yes ' decido di salvare
Save()
Return SaveResult.nYes
Case MessageBoxResult.No ' decido di non salvare
Map.refProjectManagerHardwareVM.IsModified = False
Return SaveResult.nNo
Case Else ' altrimenti non salvo
Return SaveResult.nCancel
End Select
End Function
Public Function DeleteHardware() As Boolean
DoRefresh = False
DeleteGeometry()
DeleteFileLuaInAggreagate()
Dim CurrDirPath As String = CurrPath()
BackupDeletingFile(CurrDirPath)
For Each ItemFile In m_TemplateList
If ItemFile = m_SelTemplate Then
Dim IndexList As Integer = m_TemplateList.IndexOf(m_SelTemplate)
m_TemplateList.Remove(m_SelTemplate)
If IndexList > 0 Then
SelTemplate = m_TemplateList(IndexList - 1)
ElseIf IndexList = 0 And m_TemplateList.Count > 0 Then
SelTemplate = m_TemplateList(IndexList)
Else
SelTemplate = Nothing
End If
Exit For
End If
Next
If File.Exists(CurrDirPath) Then
Try
File.Delete(CurrDirPath)
Catch ex As Exception
End Try
End If
DoRefresh = True
RefreshTemplateListEgtDOORCreator()
NotifyPropertyChanged("TemplateList")
Return True
End Function
Private Function DeleteGeometry() As Boolean
Dim sGeometryName As String
For Each Compo In m_GroupChapters
For Each Param In Compo.CompoParamList
If Param.DDFName.Contains(".CGF") And TypeOf Param Is TextBoxNgeParam Then
Dim Text As TextBoxNgeParam = DirectCast(Param, TextBoxNgeParam)
If Not String.IsNullOrWhiteSpace(Text.Value) Then
sGeometryName = Path.GetDirectoryName(Me.CurrPath) & "\" & Text.Value
BackupDeletingFile(sGeometryName)
If File.Exists(sGeometryName) Then
Try
File.Delete(sGeometryName)
Catch ex As Exception
End Try
End If
End If
Return True
End If
Next
Next
Return False
End Function
Private Function DeleteFileLuaInAggreagate() As Boolean
Dim sFileName As String
For Each Compo In m_GroupChapters
For Each Param In Compo.CompoParamList
If Param.DDFName.Contains(".Name") And TypeOf Param Is TextBoxLuaParam Then
Dim Text As TextBoxLuaParam = DirectCast(Param, TextBoxLuaParam)
If Not String.IsNullOrWhiteSpace(Text.Value) Then
sFileName = Path.GetDirectoryName(Me.CurrPath) & "\" & Text.Value
BackupDeletingFile(sFileName)
If File.Exists(sFileName) Then
Try
File.Delete(sFileName)
Catch ex As Exception
End Try
End If
End If
End If
Next
Next
Return False
End Function
' salvo nella cartella di Backup
Public Function BackupDeletingFile(DeletingFileName As String) As Boolean
Dim sCurrTime As String = Date.UtcNow.ToString.Replace(" ", "_")
sCurrTime = sCurrTime.Replace("/", "-")
sCurrTime = sCurrTime.Replace(":", "-")
Dim BackupFileName As String = Path.GetFileNameWithoutExtension(DeletingFileName) & " " & sCurrTime
If Not Directory.Exists(BackupDir) Then
Directory.CreateDirectory(BackupDir)
End If
BackupFileName = BackupDir & "\" & BackupFileName & Path.GetExtension(DeletingFileName)
' copio il file
Try
File.Copy(DeletingFileName, BackupFileName, True)
Catch ex As System.IO.IOException
' Error in copying:
MessageBox.Show(String.Format(EgtMsg(50176), ex.Message))
' interrompo la copia e la creazione
Return False
End Try
Return True
End Function
#End Region ' Salvataggio, Duplica, Nuovo, Aggiorna
Public Function CurrPath() As String
Dim ModelDir As String = String.Empty
'If m_SelBrand.ModelDir <> RegexFunction.ModelTemplate(m_HardwareGeneral.Path) Then ModelDir = m_SelBrand.ModelDirGraphic & "\"
If m_SelBrand.ModelDirGraphic <> RAD_DIR Then ModelDir = m_SelBrand.ModelDirGraphic & "\"
Return m_HardwareGeneral.Path & "\" & ModelDir & sLastTemplate & LUA_EXTENSION
End Function
Public Sub New()
' ogni nuovo hardware che creao devo avere la lista di componenti vuota
Me.ClearGroupChapters()
End Sub
#End Region ' Genaral Function
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Sub NotifyPropertyChanged(propName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
End Sub
End Class
Public Class TypeHardware
Inherits VMBase
Private m_Name As String
Public Property Name As String
Get
Return m_Name
End Get
Set(value As String)
m_Name = value
End Set
End Property
Private m_NameINI As String
Public Property NameINI As String
Get
Return m_NameINI
End Get
Set(value As String)
m_NameINI = value
End Set
End Property
Sub New(Name As String, NameINI As String)
m_Name = Name
m_NameINI = NameINI
NotifyPropertyChanged("Name")
NotifyPropertyChanged("NameINI")
End Sub
End Class