diff --git a/Constants/ConstIni.vb b/Constants/ConstIni.vb index 266dafd..4c7a077 100644 --- a/Constants/ConstIni.vb +++ b/Constants/ConstIni.vb @@ -35,6 +35,7 @@ Module ConstIni Public Const K_MODIFY As String = "Modify" Public Const K_TRANSFORM As String = "Transform" Public Const K_ONLYDRAW As String = "OnlyDraw" + Public Const K_SUPPORT As String = "Support" Public Const S_LANGUAGES As String = "Languages" Public Const K_LANGUAGE As String = "Language" @@ -90,6 +91,7 @@ Module ConstIni Public Const S_DOORS As String = "Doors" Public Const K_DDFENABLE As String = "DdfEnable" + Public Const K_DIRECTORYPATH As String = "DirectoryPath" Public Const K_DDFEXEC As String = "DdfExec" Public Const K_DDFFUNCTION As String = "DdfFun" Public Const K_DDFDIR As String = "DdfDir" diff --git a/Constants/ConstMsg.vb b/Constants/ConstMsg.vb index eaaf100..6add164 100644 --- a/Constants/ConstMsg.vb +++ b/Constants/ConstMsg.vb @@ -23,6 +23,7 @@ Public Const MSG_DOORSERRORS As Integer = MSG_EGTCAM5 + 3100 Public Const MSG_GUNSTOCK As Integer = MSG_EGTCAM5 + 3200 Public Const MSG_GUNSTOCKERRORS As Integer = MSG_EGTCAM5 + 3250 + Public Const MSG_MESSAGEBOX As Integer = 15000 Public Const MSG_MISSINGKEYWD As Integer = 10100 Public Const MSG_EGTWPFLIB5 As Integer = 30000 diff --git a/EgtCAM5.vbproj b/EgtCAM5.vbproj index e70eef4..86da606 100644 --- a/EgtCAM5.vbproj +++ b/EgtCAM5.vbproj @@ -100,6 +100,9 @@ ..\..\EgtProg\DllD32\EgtWPFLib5.dll + + ..\..\EgtProg\EgtCAM5\Ionic.Zip.dll + False ..\..\EgtProg\EgtCAM5\Microsoft.Expression.Interactions.dll @@ -662,6 +665,9 @@ true + + + IF "$(PlatformName)"=="x86" IF "$(ConfigurationName)" == "Release" copy $(TargetPath) c:\EgtProg\EgtCAM5\EgtCAM5R32.exe diff --git a/IniFile.vb b/IniFile.vb index ac8941d..1d5b65a 100644 --- a/IniFile.vb +++ b/IniFile.vb @@ -49,6 +49,8 @@ Public Module IniFile Friend m_sTempDir As String Friend m_sMachinesRoot As String Friend m_sTablesRoot As String + ' path della cartella DOORS + Friend m_sDoorsDirPath As String Friend m_ProjectMode As ProjectModeOpt Friend m_bMmUnits As Boolean @@ -184,7 +186,11 @@ Public Module IniFile End Function Friend Function IsActiveDoors() As Boolean - Return (IniFile.m_nKeyOptions And KEY_OPT.DOORS) <> 0 And (GetPrivateProfileInt(S_DOORS, K_DDFENABLE, 0) <> 0) + Dim bIsActive As Boolean = (IniFile.m_nKeyOptions And KEY_OPT.DOORS) <> 0 And (GetPrivateProfileInt(S_DOORS, K_DDFENABLE, 0) <> 0) + If bIsActive Then + GetPrivateProfileString(S_DOORS, K_DIRECTORYPATH, "", m_sDoorsDirPath) + End If + Return bIsActive End Function Friend Function IsActiveGunStock() As Boolean diff --git a/ProjectPage/DoorsPanel/DoorsPanelViewModel.vb b/ProjectPage/DoorsPanel/DoorsPanelViewModel.vb index b91cc10..d102d05 100644 --- a/ProjectPage/DoorsPanel/DoorsPanelViewModel.vb +++ b/ProjectPage/DoorsPanel/DoorsPanelViewModel.vb @@ -108,11 +108,13 @@ Namespace EgtCAM5 ''' Public Sub MTableDb(ByVal param As Object) ' Leggo dal file ini il direttorio delle MTable - If GetPrivateProfileString(S_DOORS, K_TABLESDIR, "", IniFile.m_sTablesRoot) = 0 Then + Dim sTablesDir As String = String.Empty + If GetPrivateProfileString(S_DOORS, K_TABLESDIR, "", sTablesDir) = 0 Then ' Se non lo trovo mando messaggio di errore e chiudo la finestra MessageBox.Show(EgtMsg(MSG_DOORSERRORS + 4), EgtMsg(MSG_DOORSERRORS + 1), MessageBoxButton.OK, MessageBoxImage.Error) Return End If + IniFile.m_sTablesRoot = IniFile.m_sDoorsDirPath & "\" & sTablesDir ' Verifico che la cartella indicata esista If Not My.Computer.FileSystem.DirectoryExists(IniFile.m_sTablesRoot) Then ' Se non la trovo mando messaggio di errore e chiudo la finestra diff --git a/Resources/TopCommandBar/Send.png b/Resources/TopCommandBar/Send.png new file mode 100644 index 0000000..a9bcbe4 Binary files /dev/null and b/Resources/TopCommandBar/Send.png differ diff --git a/SetUpWindow/SetUpViewModel.vb b/SetUpWindow/SetUpViewModel.vb index 5d99380..ed7521f 100644 --- a/SetUpWindow/SetUpViewModel.vb +++ b/SetUpWindow/SetUpViewModel.vb @@ -332,6 +332,7 @@ Namespace EgtCAM5 ' vi metto l'utensile e segno l'uscita come occupata CurrExitToolAss.Tool = TempTool CurrExitToolAss.IsOccupied = True + CurrExitToolAss.NotifyPropertyChanged("ToolTipMsg") ' lo metto anche come utensile originale If bOriginal Then CurrExitToolAss.OrigTool = TempTool Exit For @@ -344,17 +345,17 @@ Namespace EgtCAM5 Else Dim sSearchedTool As String = String.Empty EgtTdbGetToolFromUUID(sToolList(ToolIndex), sSearchedTool) - MessageBox.Show(EgtMsg(MSG_SETUPERRORS + 3) & " " & sSearchedTool & " " & EgtMsg(MSG_SETUPERRORS + 4), EgtMsg(MSG_SETUPERRORS + 2), MessageBoxButton.OK, MessageBoxImage.Error) + If Not String.IsNullOrWhiteSpace(sSearchedTool) Then + MessageBox.Show(EgtMsg(MSG_SETUPERRORS + 3) & " " & sSearchedTool & " " & EgtMsg(MSG_SETUPERRORS + 4), EgtMsg(MSG_SETUPERRORS + 2), MessageBoxButton.OK, MessageBoxImage.Error) + Else + MessageBox.Show(EgtMsg(MSG_SETUPERRORS + 3) & " " & EgtMsg(MSG_SETUPERRORS + 4), EgtMsg(MSG_SETUPERRORS + 2), MessageBoxButton.OK, MessageBoxImage.Error) + End If End If End If Next End If - ' non è presente la H, quindi la recupero dal modello delle posizioni nel file MachIni - Else - ''CreateStdPosFromPosIndex(nIndex) End If End If - End Sub '' Funzione che dati l'indice della posizione e la sua stringa di attrezzaggio, carica l'attrezzaggio descritto @@ -1106,9 +1107,62 @@ Public Class Position End If ' altrimenti le disattivo tutte Else - For ExitIndex = 0 To ExitToolAssociationList.Count - 1 - ExitToolAssociationList(ExitIndex).IsEnabledPos = False - Next + EgtLuaSetGlobStringVar("STU.HEAD1", sHead) + EgtLuaSetGlobStringVar("STU.HEAD2", Head) + Dim x = EgtLuaCallFunction("STU.IsCompatibleHeads") + ' Leggo variabili + Dim bIsValid As Boolean = False + EgtLuaGetGlobBoolVar("STU.ISVALID", bIsValid) + nErr = 999 + EgtLuaGetGlobIntVar("STU.ERR", nErr) + If nErr <> 0 Then + ' disattivo tutte le uscite tranne quelle attrezzate + For ExitIndex = 0 To ExitToolAssociationList.Count - 1 + If ExitToolAssociationList(ExitIndex).IsOccupied Then + ExitToolAssociationList(ExitIndex).IsEnabledPos = True + ExitToolAssociationList(ExitIndex).IsValidPos = False + Else + ExitToolAssociationList(ExitIndex).IsEnabledPos = False + End If + Next + Dim sToolName As String = String.Empty + EgtTdbGetToolFromUUID(TUuid, sToolName) + EgtOutLog("Error in setup! Tool:" & sToolName & " TcPos: " & m_TcPos) + Return + End If + If bIsValid Then + ' se l'uscita restituita è libera la attivo e disattivo tutte le altre non occupate + If Not ExitToolAssociationList(nExit - 1).IsOccupied Then + For ExitIndex = 0 To ExitToolAssociationList.Count - 1 + If ExitIndex = nExit - 1 Then + ExitToolAssociationList(ExitIndex).IsEnabledPos = True + ExitToolAssociationList(ExitIndex).IsValidPos = True + ElseIf ExitToolAssociationList(ExitIndex).IsOccupied Then + ExitToolAssociationList(ExitIndex).IsValidPos = False + Else + ExitToolAssociationList(ExitIndex).IsEnabledPos = False + End If + Next + ' altrimenti le disattivo tutte tranne quelle occupate + Else + For ExitIndex = 0 To ExitToolAssociationList.Count - 1 + If ExitToolAssociationList(ExitIndex).IsOccupied Then + ExitToolAssociationList(ExitIndex).IsEnabledPos = True + If ExitIndex = nExit - 1 Then + ExitToolAssociationList(ExitIndex).IsValidPos = True + Else + ExitToolAssociationList(ExitIndex).IsValidPos = False + End If + Else + ExitToolAssociationList(ExitIndex).IsEnabledPos = False + End If + Next + End If + Else + For ExitIndex = 0 To ExitToolAssociationList.Count - 1 + ExitToolAssociationList(ExitIndex).IsEnabledPos = False + Next + End If End If End Sub @@ -1201,9 +1255,13 @@ Public Class ExitToolAssociation If IsNothing(m_IsValidPos) Then Return New SolidColorBrush(Color.FromArgb(255, 221, 221, 221)) ElseIf m_IsValidPos Then - Return EgaltechGreen + If m_IsOccupied Then + Return EgaltechYellow + Else + Return EgaltechGreen + End If Else - Return EgaltechYellow + Return New SolidColorBrush(Color.FromArgb(255, 221, 221, 221)) End If End Get End Property diff --git a/Special/Doors.vb b/Special/Doors.vb index b4ae58c..ff11d1c 100644 --- a/Special/Doors.vb +++ b/Special/Doors.vb @@ -57,7 +57,9 @@ Public Module Doors Function CreateDoors(ByRef sDdfFile As String, bNcGen As Boolean, bBatch As Boolean) As Boolean ' Carico il file Dim sExecPath As String = String.Empty - GetPrivateProfileString(S_DOORS, K_DDFEXEC, "", sExecPath) + Dim sExecName As String = String.Empty + GetPrivateProfileString(S_DOORS, K_DDFEXEC, "", sExecName) + sExecPath = IniFile.m_sDoorsDirPath & "\" & sExecName If Not EgtLuaExecFile(sExecPath) Then Return False ' Lancio la creazione EgtLuaSetGlobStringVar("DGD.FILE", sDdfFile) @@ -79,7 +81,9 @@ Public Module Doors scene.Cursor = System.Windows.Forms.Cursors.WaitCursor ' Carico ed eseguo il file Dim sExecPath As String = String.Empty - GetPrivateProfileString(S_DOORS, K_DDFMACHEXEC, "", sExecPath) + Dim sExecName As String = String.Empty + GetPrivateProfileString(S_DOORS, K_DDFMACHEXEC, "", sExecName) + sExecPath = IniFile.m_sDoorsDirPath & "\" & sExecName Dim bOk As Boolean = EgtLuaExecFile(sExecPath) ' Cursore standard scene.Cursor = System.Windows.Forms.Cursors.Default diff --git a/TopCommandBar/TopCommandBarView.xaml b/TopCommandBar/TopCommandBarView.xaml index e60d00e..37ea0db 100644 --- a/TopCommandBar/TopCommandBarView.xaml +++ b/TopCommandBar/TopCommandBarView.xaml @@ -37,6 +37,9 @@ + diff --git a/TopCommandBar/TopCommandBarViewModel.vb b/TopCommandBar/TopCommandBarViewModel.vb index 6a5d5e2..adbb35f 100644 --- a/TopCommandBar/TopCommandBarViewModel.vb +++ b/TopCommandBar/TopCommandBarViewModel.vb @@ -1,4 +1,5 @@ Imports System.Collections.ObjectModel +Imports System.IO Imports EgtUILib Namespace EgtCAM5 @@ -24,6 +25,7 @@ Namespace EgtCAM5 Private m_cmdImport As ICommand Private m_cmdExport As ICommand Private m_cmdOptions As ICommand + Private m_cmdSendFeedback As ICommand #Region "Messages" @@ -369,6 +371,110 @@ Namespace EgtCAM5 #End Region ' OptionsCommand +#Region "SendFeedbackCommand" + + ''' + ''' Returns a command that do Export. + ''' + Public ReadOnly Property SendFeedbackCommand As ICommand + Get + If m_cmdSendFeedback Is Nothing Then + m_cmdSendFeedback = New RelayCommand(AddressOf SendFeedback) + End If + Return m_cmdSendFeedback + End Get + End Property + + ''' + ''' Execute the Export. This method is invoked by the ExportCommand. + ''' + Public Sub SendFeedback(ByVal param As Object) + ' recupero indirizzo supporto + Dim sSupportAddress As String = String.Empty + GetPrivateProfileString(S_GENERAL, K_SUPPORT, "", sSupportAddress) + ' se vuoto do messaggio di errore ed esco + If String.IsNullOrWhiteSpace(sSupportAddress) Then + MessageBox.Show(EgtMsg(MSG_TOPCOMMANDBAR + 10), EgtMsg(MSG_MESSAGEBOX + 1), MessageBoxButton.OK, MessageBoxImage.Error) + Return + End If + ' recupero numero chiave + Dim sKey As String = String.Empty + EgtGetKeyInfo(sKey) + ' recupero file del progetto corrente + Dim sCurrProject As String = String.Empty + EgtGetCurrFilePath(sCurrProject) + If String.IsNullOrWhiteSpace(sCurrProject) Then + If MessageBox.Show(EgtMsg(MSG_TOPCOMMANDBAR + 11), "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then + Application.Msn.NotifyColleagues(Application.SAVEPROJECT) + End If + EgtGetCurrFilePath(sCurrProject) + Else + If EgtGetModified() Then + If MessageBox.Show(EgtMsg(MSG_TOPCOMMANDBAR + 11), "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then + Application.Msn.NotifyColleagues(Application.SAVEPROJECT) + End If + End If + End If + Dim DoorOtherFiles As New List(Of String) + ' se door attivo + If IniFile.IsActiveDoors Then + ' recupero file con lo stesso nome del progetto + If Not String.IsNullOrWhiteSpace(sCurrProject) Then + Dim sCurrProjectDir As String = Path.GetDirectoryName(sCurrProject) + If Not String.IsNullOrWhiteSpace(sCurrProjectDir) Then + Dim TempFiles() As String = Directory.GetFiles(sCurrProjectDir) + For FileIndex = 0 To TempFiles.Count - 1 + If Path.GetFileNameWithoutExtension(TempFiles(FileIndex)).Contains(Path.GetFileNameWithoutExtension(sCurrProject)) AndAlso TempFiles(FileIndex) <> sCurrProject Then + DoorOtherFiles.Add(TempFiles(FileIndex)) + End If + Next + End If + End If + End If + ' creo zip file da allegare + Dim sZipToCreate As String = IniFile.m_sTempDir & "\Feedback.zip" + If File.Exists(sZipToCreate) Then + File.Delete(sZipToCreate) + End If + Try + Using zip As New Ionic.Zip.ZipFile(sZipToCreate, Console.Out) + ' aggiungo file macchina + zip.AddItem(IniFile.m_sMachinesRoot & "\" & IniFile.m_sMachineName, IniFile.m_sMachineName) + ' aggiungo progetto corrente + If Not String.IsNullOrWhiteSpace(sCurrProject) Then + zip.AddItem(sCurrProject, "") + End If + ' se door attivo + If IniFile.IsActiveDoors Then + zip.AddItem(IniFile.m_sDoorsDirPath, "Doors") + If DoorOtherFiles.Count > 0 Then + For FileIndex = 0 To DoorOtherFiles.Count - 1 + zip.AddItem(DoorOtherFiles(FileIndex), "") + Next + End If + End If + ' salvo lo zip + zip.Save() + End Using + Catch ex1 As Exception + EgtOutLog("Exception in zip: " & ex1.ToString()) + End Try + ' preparo la mail per il supporto + Try + Dim SendFeedbackWindow As New EgtWPFLib5.MapiMailMessage("EgtCAM5 Feedback - " & sKey) + SendFeedbackWindow.Recipients.Add(sSupportAddress) + If Not String.IsNullOrWhiteSpace(sZipToCreate) AndAlso File.Exists(sZipToCreate) Then + SendFeedbackWindow.Files.Add(IniFile.m_sTempDir & "\Feedback.zip") + End If + SendFeedbackWindow.ShowDialog() + Catch ex As Exception + EgtOutLog("Feedback exception: " & ex.ToString) + MessageBox.Show(String.Format(EgtMsg(MSG_TOPCOMMANDBAR + 12), sSupportAddress, sZipToCreate), EgtMsg(MSG_MESSAGEBOX + 3), MessageBoxButton.OK, MessageBoxImage.Information) + End Try + End Sub + +#End Region ' SendFeedbackCommand + #End Region ' Commands End Class