Imports System.Collections.ObjectModel Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Imports EgtPHOTOLib Public Class OptionWindowVM Inherits VMBase #Region "FIELDS & PROPERTIES" Private m_LanguageList As New List(Of Language) Public ReadOnly Property LanguageList As List(Of Language) Get Return m_LanguageList End Get End Property Private m_SelLanguage As Language Public Property SelLanguage As Language Get Return m_SelLanguage End Get Set(value As Language) If value IsNot m_SelLanguage Then m_SelLanguage = value WriteMainPrivateProfileString(S_GENERAL, K_MESSAGES, m_SelLanguage.Name) End If End Set End Property Private m_MeasureUnitList As New List(Of String)({"inch", "mm"}) Public ReadOnly Property MeasureUnitList As List(Of String) Get Return m_MeasureUnitList End Get End Property Public Property SelMeasureUnit As Integer Get Return If(EgtUiUnitsAreMM(), MeasureUnitOpt.MM, MeasureUnitOpt.INCH) End Get Set(value As Integer) ' salvo unità di misura precedente Dim PrevMeasureUnit As MeasureUnitOpt = If(EgtUiUnitsAreMM(), MeasureUnitOpt.MM, MeasureUnitOpt.INCH) If value <> PrevMeasureUnit Then ' cambio unità di misura EgtSetUiUnits(DirectCast(value, MeasureUnitOpt) = MeasureUnitOpt.MM) Map.refStatusBarVM.SetMeasureUnit(value) WriteMainPrivateProfileString(S_GENERAL, K_MMUNITS, value.ToString()) ' aggiorno tolleranza spessore NotifyPropertyChanged("ThicknessTolerance") If Map.refProjectVM.SelProjectMode = ProjectSlabVM.ProjectModeOpt.DETAIL Then ' aggiorno spessore in OptionPanel Map.refOptionPanelVM.SelSlab.NotifyPropertyChanged("Thickness") ElseIf Map.refProjectVM.SelProjectMode = ProjectSlabVM.ProjectModeOpt.LIST Then ' aggiorno spessore nei tooltip delle lastre della lista For Each Slab In Map.refProjectVM.SlabList Slab.NotifyPropertyChanged("Slab_Tooltip") Next End If End If End Set End Property Public ReadOnly Property LabelFileName As String Get Return Map.refMainWindowVM.MainWindowM.sTemplateFilePrinter End Get End Property Public ReadOnly Property LabelVisibility As Visibility Get If Map.refMainWindowVM.MainWindowM.PrinterIsVisible Then Return Visibility.Visible Else Return Visibility.Collapsed End If End Get End Property Private m_ThicknessTolerance As Double Public Property ThicknessTolerance As String Get Return LenToString(m_ThicknessTolerance, -2) End Get Set(value As String) Dim dThicknessTolerance As Double = 0 If StringToLen(value, dThicknessTolerance) And dThicknessTolerance > -EPS_ZERO Then m_ThicknessTolerance = dThicknessTolerance WriteMainPrivateProfileString(S_SEARCH, K_THICKNESSTOLERANCE, DoubleToString(m_ThicknessTolerance, 2)) Else NotifyPropertyChanged("ThicknessTolerance") ' Non sono ammessi spessori negativi Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 18) MessageBox.Show(sMsg) End If End Set End Property Private Sub SetThicknessTolerance(value As Double) m_ThicknessTolerance = value NotifyPropertyChanged("ThicknessTolerance") End Sub #Region "Material" Private m_MaterialList As ObservableCollection(Of String) Public ReadOnly Property MaterialList As ObservableCollection(Of String) Get Return m_MaterialList End Get End Property Private m_SelMaterial As String Public Property SelMaterial As String Get Return m_SelMaterial End Get Set(value As String) m_SelMaterial = value End Set End Property Private m_NewMatName As String Public Property NewMatName As String Get Return m_NewMatName End Get Set(value As String) m_NewMatName = value ' Verifico che il nome non sia vuoto If Not String.IsNullOrWhiteSpace(m_NewMatName) Then ' Verifico che il nome non sia già utilizzato Dim bNameExist As Boolean = False For Each Material In m_MaterialList If Material = m_NewMatName Then bNameExist = True Exit For End If Next If Not bNameExist Then m_MaterialList.Add(m_NewMatName) End If End If ' Nascondo textbox per il nome NewMatName_Visibility = Visibility.Collapsed m_NewMatName = String.Empty End Set End Property Private m_NewMatName_Visibility As Visibility = Visibility.Collapsed Public Property NewMatName_Visibility As Visibility Get Return m_NewMatName_Visibility End Get Set(value As Visibility) m_NewMatName_Visibility = value NotifyPropertyChanged("NewMatName_Visibility") End Set End Property #End Region ' Material #Region "Messages" Public ReadOnly Property Title As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 1) End Get End Property Public ReadOnly Property CurrentLanguageMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 1) End Get End Property Public ReadOnly Property LanguageAdvertMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 2) End Get End Property Public ReadOnly Property MeasureUnitMsg As String Get Return EgtMsg(MSG_OPTIONSPAGEUC + 3) End Get End Property Public ReadOnly Property SearchMsg As String Get Return EgtMsg(MSG_SEARCHPANEL + 1) End Get End Property Public ReadOnly Property ThicknessToleranceMsg As String Get Return EgtMsg(MSG_SEARCHPANEL + 2) End Get End Property Public ReadOnly Property MaterialsMsg As String Get Return EgtMsg(MSG_ALARMSPAGEUC + 13) End Get End Property Public ReadOnly Property NewMatMsg As String Get Return EgtMsg(MSG_ALARMSPAGEUC + 34) End Get End Property Public ReadOnly Property RemoveMatMsg As String Get Return EgtMsg(MSG_ALARMSPAGEUC + 35) End Get End Property Public ReadOnly Property BrowseMsg As String Get Return EgtMsg(92058) End Get End Property Public ReadOnly Property LabelMsg As String Get Return EgtMsg(92056) End Get End Property #End Region ' Messages ' Definizione comandi Private m_cmdNewMat As ICommand Private m_cmdRemoveMat As ICommand Private m_cmdBrowse As ICommand #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" Sub New() ' Leggo nome lingua corrente Dim sLanguage As String = String.Empty GetMainPrivateProfileString(S_GENERAL, K_MESSAGES, "", sLanguage) ' Leggo elenco lingue disponibili da file ini e imposto lingua corrente Dim nIndex As Integer = 1 While True Dim ReadLanguage As Language = GetMainPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex) If IsNothing(ReadLanguage) Then Exit While m_LanguageList.Add(ReadLanguage) If String.Compare(ReadLanguage.Name, sLanguage, True) = 0 Then m_SelLanguage = ReadLanguage End If nIndex += 1 End While ' Copio lista materiali m_MaterialList = New ObservableCollection(Of String)(Map.refProjectVM.MaterialList) ' Leggo tolleranza spessore SetThicknessTolerance(GetMainPrivateProfileDouble(S_SEARCH, K_THICKNESSTOLERANCE, 0)) End Sub #End Region ' CONSTRUCTOR #Region "METHODS" Friend Sub CloseOptionWindow() ' Aggiorno lista materiali Map.refProjectVM.MaterialList = New List(Of String)(m_MaterialList) ' Aggiorno lista materiali per ricerca Map.refSearchPanelVM.InitSearchPanel() ' Scrivo lista materiali da file ini Dim Index As Integer For Index = 0 To m_MaterialList.Count - 1 WriteMainPrivateProfileString(S_MATERIALS, K_MATERIAL & (Index + 1).ToString, m_MaterialList(Index)) Next ' Cancello eventuali successivi rimasti Dim sMaterial As String = String.Empty While GetMainPrivateProfileString(S_MATERIALS, K_MATERIAL & Index, "", sMaterial) > 0 WriteMainPrivateProfileString(S_MATERIALS, K_MATERIAL & (Index + 1).ToString, String.Empty) Index += 1 End While End Sub #End Region #Region "COMMANDS" #Region "NewMatCommand" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property NewMatCommand As ICommand Get If m_cmdNewMat Is Nothing Then m_cmdNewMat = New Command(AddressOf NewMat) End If Return m_cmdNewMat End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub NewMat(ByVal param As Object) NewMatName_Visibility = Visibility.Visible End Sub #End Region ' NewMatCommand #Region "RemoveMatCommand" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property RemoveMatCommand As ICommand Get If m_cmdRemoveMat Is Nothing Then m_cmdRemoveMat = New Command(AddressOf RemoveMat) End If Return m_cmdRemoveMat End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub RemoveMat(ByVal param As Object) If Not IsNothing(SelMaterial) Then If MessageBox.Show(EgtMsg(MSG_ALARMSPAGEUC + 42), "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then MaterialList.Remove(SelMaterial) End If End If End Sub #End Region ' RemoveMatCommand #Region "Browse" #End Region ' Browse Public ReadOnly Property BrowseCommand As ICommand Get If m_cmdBrowse Is Nothing Then m_cmdBrowse = New Command(AddressOf BrowseFile) End If Return m_cmdBrowse End Get End Property Public Sub BrowseFile(ByVal Param As Object) ' recupero il nome del direttorio Dim CurrDirectory As String = Path.GetDirectoryName(Map.refMainWindowVM.MainWindowM.sTemplateFilePrinter) ' Apro la finestra di dialogo aperta direttamente sulla cartella cercata Dim OpenFileDialog As New Microsoft.Win32.OpenFileDialog() With { .InitialDirectory = CurrDirectory } OpenFileDialog.Filter = "prn files (*.prn)|*.prn" If OpenFileDialog.ShowDialog() <> True Then ' se la risposta è diversa da OK esce Else ' carico l'indirizzo del template che voglio aprire Map.refMainWindowVM.MainWindowM.sTemplateFilePrinter = OpenFileDialog.FileName NotifyPropertyChanged("LabelFileName") End If End Sub #End Region ' COMMANDS End Class