Imports System.IO Imports EgtUILib Public Class InternalComponentPageUC 'Riferimento alla MainWindow Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) ' Flag che indica se è attiva la prima o la seconda pagina Friend m_bIsFirstPage As Boolean Friend CurrentBtn As Button = Nothing ' Variabile che contiene il nome del componente selezionato Friend m_sCurrCompoFam As String = String.Empty Private Sub InternalComponentPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded m_bIsFirstPage = True LoadPage() CurrentBtn = Nothing ' bottone per selezionare la seconda pagina di componenti interni Compo9.SetValue(Grid.ColumnProperty, 0) Compo9.SetValue(Grid.ColumnSpanProperty, 2) LabelCompo9.Text = EgtMsg(90409) ' Altri ImageCompo9.Visibility = Windows.Visibility.Hidden LabelCompo9.Visibility = Windows.Visibility.Visible ' Se i componenti interni sono più di 8 viene visualizzato il bottone "Altri" altrimenti no Dim nCount As Integer = GetPrivateProfileInt(S_INTCOMPO, K_INT_COUNT, 0, m_MainWindow.GetIniFile()) If nCount > 8 Then Compo9.Visibility = Windows.Visibility.Visible Else Compo9.Visibility = Windows.Visibility.Hidden End If m_MainWindow.m_DrawPageUC.m_ActiveComponentPage = DrawPageUC.Pages.InternalComponent ' Abilito bottoni angoli di fianco e lavorazioni da sotto m_MainWindow.m_DrawPageUC.SideAngleBtn.IsEnabled = m_MainWindow.m_DrawPageUC.bEnableSideAngle m_MainWindow.m_DrawPageUC.FiloTopBtn.IsEnabled = m_MainWindow.m_CurrentMachine.bMilling m_MainWindow.m_DrawPageUC.EngraveBtn.IsEnabled = True m_MainWindow.m_DrawPageUC.DripCutBtn.IsEnabled = m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.UNDER_CUT) And Not String.IsNullOrWhiteSpace(m_MainWindow.m_CurrentMachine.sCurrDripSaw) End Sub Private Function GetButton(ByVal nInd As Integer) As Button Select Case nInd Case 1 Return Compo1 Case 2 Return Compo2 Case 3 Return Compo3 Case 4 Return Compo4 Case 5 Return Compo5 Case 6 Return Compo6 Case 7 Return Compo7 Case 8 Return Compo8 Case Else Return Compo9 End Select End Function Private Function GetLabel(ByVal nInd As Integer) As TextBlock Select Case nInd Case 1 Return LabelCompo1 Case 2 Return LabelCompo2 Case 3 Return LabelCompo3 Case 4 Return LabelCompo4 Case 5 Return LabelCompo5 Case 6 Return LabelCompo6 Case 7 Return LabelCompo7 Case 8 Return LabelCompo8 Case Else Return LabelCompo9 End Select End Function Private Function GetImage(ByVal nInd As Integer) As Image Select Case nInd Case 1 Return ImageCompo1 Case 2 Return ImageCompo2 Case 3 Return ImageCompo3 Case 4 Return ImageCompo4 Case 5 Return ImageCompo5 Case 6 Return ImageCompo6 Case 7 Return ImageCompo7 Case 8 Return ImageCompo8 Case Else Return ImageCompo9 End Select End Function Friend Function GetIndexFromButton(Button As Button) As Integer Select Case Button.Name Case "Compo1" If m_bIsFirstPage Then Return 1 Else Return 9 End If Case "Compo2" If m_bIsFirstPage Then Return 2 Else Return 10 End If Case "Compo3" If m_bIsFirstPage Then Return 3 Else Return 11 End If Case "Compo4" If m_bIsFirstPage Then Return 4 Else Return 12 End If Case "Compo5" If m_bIsFirstPage Then Return 5 Else Return 13 End If Case "Compo6" If m_bIsFirstPage Then Return 6 Else Return 14 End If Case "Compo7" If m_bIsFirstPage Then Return 7 Else Return 15 End If Case Else If m_bIsFirstPage Then Return 8 Else Return 16 End If End Select End Function Private Sub Compo_Click(sender As Object, e As RoutedEventArgs) Handles Compo1.Click, Compo2.Click, Compo3.Click, Compo4.Click, Compo5.Click, Compo6.Click, Compo7.Click, Compo8.Click CurrentBtn = e.Source Dim CompoName As String = S_INTCOMPO & GetIndexFromButton(CurrentBtn).ToString m_sCurrCompoFam = CompoName ' m_SecondaryComponentPage.m_sCurrCompo = String.Empty Dim nCount As Integer = GetPrivateProfileInt(CompoName, K_CMP_COUNT, 0, m_MainWindow.GetIniFile()) If nCount > 1 Then m_MainWindow.m_DrawPageUC.LeftButtonGrd.Children.Remove(Me) m_MainWindow.m_DrawPageUC.m_ActiveComponentPage = DrawPageUC.Pages.SecondaryComponent ' m_MainWindow.m_DrawPageUC.LeftButtonGrd.Children.Add(m_SecondaryComponentPage) Else Dim nCompoName As Integer Dim sCompo As String = String.Empty Dim sCompoImage As String = String.Empty GetPrivateProfileCompo(CompoName, CompoName, nCompoName, sCompo, sCompoImage, m_MainWindow.GetIniFile()) 'm_MainWindow.m_DrawPageUC.DimensionBtn.IsChecked = True m_MainWindow.m_DrawPageUC.SideAngleBtn.IsChecked = False m_MainWindow.m_DrawPageUC.FiloTopBtn.IsChecked = False m_MainWindow.m_DrawPageUC.EngraveBtn.IsChecked = False m_MainWindow.m_DrawPageUC.DripCutBtn.IsChecked = False m_MainWindow.m_DrawPageUC.SideAngleBtn.IsEnabled = m_MainWindow.m_DrawPageUC.bEnableSideAngle m_MainWindow.m_DrawPageUC.FiloTopBtn.IsEnabled = m_MainWindow.m_CurrentMachine.bMilling m_MainWindow.m_DrawPageUC.EngraveBtn.IsEnabled = True m_MainWindow.m_DrawPageUC.DripCutBtn.IsEnabled = m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.UNDER_CUT) And Not String.IsNullOrWhiteSpace(m_MainWindow.m_CurrentMachine.sCurrDripSaw) m_MainWindow.m_DrawPageUC.MessageGrid.Visibility = Windows.Visibility.Visible m_MainWindow.m_DrawPageUC.BackBtn.Visibility = Windows.Visibility.Visible m_MainWindow.m_DrawPageUC.TopGrd.Visibility = Windows.Visibility.Visible m_MainWindow.m_DrawPageUC.PartNameGrd.Visibility = Windows.Visibility.Visible m_MainWindow.m_DrawPageUC.PartNumberGrd.Visibility = Windows.Visibility.Visible ' Carico componente m_MainWindow.m_DrawPageUC.SelectedComponent(sCompo) 'Attivo Bottoni aggiungi e rimuovi m_MainWindow.m_DrawPageUC.m_CompoDimension.AddBtn.Visibility = Windows.Visibility.Visible m_MainWindow.m_DrawPageUC.m_CompoDimension.CancelBtn.Visibility = Windows.Visibility.Visible m_MainWindow.m_DrawPageUC.m_CompoDimension.InternComponentBtn.Visibility = Windows.Visibility.Hidden m_MainWindow.m_DrawPageUC.LeftButtonGrd.Children.Remove(Me) m_MainWindow.m_DrawPageUC.VariablesGrd.Children.Add(m_MainWindow.m_DrawPageUC.m_CompoDimension) End If End Sub Public Function GetPrivateProfileCompo( ByVal lpAppName As String, ByVal lpKeyName As String, ByRef lpCompoName As Integer, ByRef lpCompo As String, ByRef lpCompoImage As String, ByVal lpFileName As String) As Boolean Dim sVal As String = String.Empty GetPrivateProfileString(lpAppName, lpKeyName, "", sVal, lpFileName) Dim sItems() As String = sVal.Split(",".ToCharArray) If sItems.Count() >= 2 Then lpCompoName = 0 StringToInt(sItems(0), lpCompoName) lpCompo = sItems(1) If sItems.Count() >= 3 Then lpCompoImage = sItems(2) Else lpCompoImage = String.Empty End If Return True End If Return False End Function Private Sub ClearButton(nCount As Integer) Dim nEndIndex As Integer If m_bIsFirstPage Then nEndIndex = If(nCount < 8, nCount, 8) Else nEndIndex = If(nCount < 16, nCount - 8, 8) End If For index As Integer = 1 To nEndIndex GetLabel(index).Text = String.Empty GetImage(index).Source = Nothing GetButton(index).Visibility = Windows.Visibility.Visible Next For index As Integer = nEndIndex + 1 To 8 GetLabel(index).Text = String.Empty GetImage(index).Source = Nothing GetButton(index).Visibility = Windows.Visibility.Hidden Next End Sub Private Sub LoadPage() Dim nDeltaSecondPage As Integer = 8 ' Leggo numero di componenti presenti Dim nCompoNumber As Integer = GetPrivateProfileInt(S_INTCOMPO, K_INT_COUNT, 0, m_MainWindow.GetIniFile()) ' Calcolo indici a seconda della pagina in cui sono If m_bIsFirstPage Then ClearButton(nCompoNumber) nDeltaSecondPage = 0 Else ClearButton(nCompoNumber) nDeltaSecondPage = 8 End If ' Creazione converter da String a ImageSource Dim ImageConverter As New ImageSourceConverter Dim ThicknessConverter As New ThicknessConverter ' Assegnazione immagine e testo ai Button For index As Integer = 1 To 8 Dim CustomThickness As Thickness = ThicknessConverter.ConvertFromString("0") Dim nCompoName As Integer Dim sCompo As String = "" Dim sCompoImage As String = "" m_MainWindow.m_DrawPageUC.m_MainComponentPage.GetPrivateProfileCompo("InternalCompo" & index + nDeltaSecondPage, "InternalCompo" & index + nDeltaSecondPage, nCompoName, sCompo, sCompoImage, m_MainWindow.GetIniFile()) Dim sCompoImageSource As ImageSource ' Se foro da sotto, lo carico solo se abilitato dalla chiave e dalla macchina If String.Compare(sCompo, "IntDownHole.lua", True) = 0 AndAlso (Not m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.UNDER_CUT) Or String.IsNullOrWhiteSpace(m_MainWindow.m_CurrentMachine.sCurrDripDrill)) Then GetButton(index).IsEnabled = False End If ' Verifico presenza immagine e la aggiungo If sCompoImage.Length <> 0 Then Try Dim sPath As String = m_MainWindow.GetResourcesDir() & "\" & sCompoImage If File.Exists(sPath) Then sCompoImageSource = ImageConverter.ConvertFromString(sPath) GetImage(index).Height = 65 GetImage(index).Width = 65 GetImage(index).Source = sCompoImageSource GetLabel(index).SetValue(Grid.ColumnProperty, 1) GetLabel(index).SetValue(Grid.ColumnSpanProperty, 1) Else sCompoImage = String.Empty GetImage(index).Height = 0 GetImage(index).Width = 0 CustomThickness.Right = 0 GetImage(index).Margin = CustomThickness GetLabel(index).SetValue(Grid.ColumnProperty, 0) GetLabel(index).SetValue(Grid.ColumnSpanProperty, 2) End If Catch ex As Exception EgtOutLog("Error loading image " & sCompoImage) sCompoImage = String.Empty GetImage(index).Height = 0 GetImage(index).Width = 0 CustomThickness.Right = 0 GetImage(index).Margin = CustomThickness GetLabel(index).SetValue(Grid.ColumnProperty, 0) GetLabel(index).SetValue(Grid.ColumnSpanProperty, 2) End Try Else 'Se non c'è l'immagine azzero la distanza tra testo e immagine CustomThickness.Right = 0 GetImage(index).Margin = CustomThickness GetLabel(index).SetValue(Grid.ColumnProperty, 0) GetLabel(index).SetValue(Grid.ColumnSpanProperty, 2) End If ' Verifico presenza testo If nCompoName > 0 Then Dim sCompoName As String = EgtMsg(MSG_COMPONENTPAGEUC + nCompoName) ' verifico presenza immagine If sCompoImage.Length > 0 Then ' se la lunghezza del testo è maggiore di 20 lo taglio If sCompoName.Length > 20 Then sCompoName = sCompoName.Substring(0, 20) End If GetLabel(index).Text = sCompoName ' Se ci sono sia testo che immagine imposto un margine di 10 CustomThickness.Right = 10 GetImage(index).Margin = CustomThickness Else ' se l'immagine non c'è e il testo è maggiore di 30 lo taglio If sCompoName.Length > 30 Then sCompoName = sCompoName.Substring(0, 30) End If GetLabel(index).Text = sCompoName End If Else 'Se non c'è testo azzero la distanza tra testo e immagine CustomThickness.Right = 0 GetImage(index).Margin = CustomThickness End If Next End Sub ' Gestione bottone altri componenti Private Sub Compo9_Click(sender As Object, e As RoutedEventArgs) Handles Compo9.Click If m_bIsFirstPage Then m_bIsFirstPage = False LoadPage() 'Compo9.SetValue(Grid.ColumnProperty, 1) 'Compo9.SetValue(Grid.ColumnSpanProperty, 1) 'ImageCompo9.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/Resources/NumericKeyboardArrow.png", UriKind.Relative)) 'ImageCompo9.Visibility = Windows.Visibility.Visible 'LabelCompo9.Visibility = Windows.Visibility.Hidden Compo9.SetValue(Grid.ColumnProperty, 0) Compo9.SetValue(Grid.ColumnSpanProperty, 2) ImageCompo9.Visibility = Windows.Visibility.Hidden LabelCompo9.Visibility = Windows.Visibility.Visible Else m_bIsFirstPage = True LoadPage() Compo9.SetValue(Grid.ColumnProperty, 0) Compo9.SetValue(Grid.ColumnSpanProperty, 2) ImageCompo9.Visibility = Windows.Visibility.Hidden LabelCompo9.Visibility = Windows.Visibility.Visible End If End Sub Private Sub BackBtn_Click(sender As Object, e As RoutedEventArgs) Handles BackBtn.Click m_MainWindow.m_DrawPageUC.m_SceneButtons.MeasureBtn.IsChecked = False '--------- NUOVA GESTIONE --------- If m_MainWindow.m_DrawPageUC.m_CompoDimension.bEnableAlzFront Then ' rimuovo l'elenco di bottoni per selezionare il tipo di componente interna m_MainWindow.m_DrawPageUC.LeftButtonGrd.Children.Remove(Me) ' inserisco nella Grid VaribalsesGrid lo UeserControl per definire le dimensioni della componente m_MainWindow.m_DrawPageUC.VariablesGrd.Children.Add(m_MainWindow.m_DrawPageUC.m_CompoDimension) ' nascondo la lista dei parametri m_MainWindow.m_DrawPageUC.m_CompoDimension.CollapsedAllParam() ' sto uscendo dalla componente interna (quindi comunico il cambio di componente) m_MainWindow.m_DrawPageUC.m_bInternalCompo = False ' comunico che sto arrivando da una componente interna m_MainWindow.m_DrawPageUC.m_bBackFromInternalCompo = True Return End If '--------- VECCHIA GESTIONE --------- ' torno alla pagina iniziale di selezione del piano (Compo) m_MainWindow.m_DrawPageUC.BackBtn_Click(sender, e) 'm_MainWindow.m_DrawPageUC.SelectedComponent(m_MainWindow.m_DrawPageUC.m_sMainCompo) m_MainWindow.m_DrawPageUC.m_ActiveComponentPage = DrawPageUC.Pages.CompoDimension End Sub End Class