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 AddNewMaterial() NotifyPropertyChanged("EnableOkNewMat") End Set End Property Private m_EnableOkNewMat As Boolean = False Public Property EnableOkNewMat As Boolean Get Return m_EnableOkNewMat End Get Set(value As Boolean) m_EnableOkNewMat = value 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 Public ReadOnly Property OkMsg As String Get Return "Ok" End Get End Property Public ReadOnly Property CancelMsg As String Get Return "Cancel" End Get End Property #End Region ' Messages ' Definizione comandi Private m_cmdNewMat As ICommand Private m_cmdRemoveMat As ICommand Private m_cmdBrowse As ICommand Private m_cmdOk As ICommand Private m_cmdCanel 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 Private Function AddNewMaterial() As Boolean 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) m_EnableOkNewMat = True Return True End If End If ' ' Nascondo textbox per il nome ' NewMatName_Visibility = Visibility.Collapsed ' m_NewMatName = String.Empty m_EnableOkNewMat = False Return False End Function #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 "OkCommand" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property OkCommand As ICommand Get If m_cmdOk Is Nothing Then m_cmdOk = New Command(AddressOf OkMat) End If Return m_cmdOk End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub OkMat(ByVal param As Object) ' aggiungo il materiale alla lista m_MaterialList.Add(m_NewMatName) ' Nascondo textbox per il nome NewMatName_Visibility = Visibility.Collapsed m_NewMatName = String.Empty NotifyPropertyChanged("NewMatName") End Sub #End Region ' OkCommand #Region "CancelCommand" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property CamcelCommand As ICommand Get If m_cmdCanel Is Nothing Then m_cmdCanel = New Command(AddressOf CancelMat) End If Return m_cmdCanel End Get End Property ''' ''' Execute the Exec. This method is invoked by the ExecCommand. ''' Public Sub CancelMat(ByVal param As Object) ' Nascondo textbox per il nome NewMatName_Visibility = Visibility.Collapsed m_NewMatName = String.Empty NotifyPropertyChanged("NewMatName") End Sub #End Region ' CancelCommand #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