Files
OmagCUT/DrawImport/InternalComponentPageUC.xaml.vb
2022-04-07 17:48:00 +02:00

404 lines
16 KiB
VB.net

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(MSG_COMPONENTPAGEUC + 9) ' 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