Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtUILib
Namespace EgtCAM5
Public Class TopCommandBarViewModel
Inherits ViewModelBase
#Region "FIELDS & PROPERTIES"
Private m_ProjectMode As ProjectModeOpt
Public ReadOnly Property MruFileNames As ObservableCollection(Of String)
Get
Return IniFile.m_MruFiles.m_FileNames
End Get
End Property
' Definizione comandi
Private m_cmdNew As ICommand
Private m_cmdOpen As ICommand
Private Shared m_cmdOpenMruFile As ICommand
Private m_cmdSave As ICommand
Private m_cmdSaveAs As ICommand
Private m_cmdInsert As ICommand
Private m_cmdImport As ICommand
Private m_cmdExport As ICommand
Private m_cmdOptions As ICommand
Private m_cmdSendFeedback As ICommand
#Region "Messages"
Public ReadOnly Property DrawMsg As String
Get
Return EgtMsg(MSG_MAINWINDOW + 1)
End Get
End Property
Public ReadOnly Property MachiningMsg As String
Get
Return EgtMsg(MSG_MAINWINDOW + 2)
End Get
End Property
#End Region ' Messages
#Region "ToolTip"
'Proprietà ToolTip
Public ReadOnly Property NewToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 1)
End Get
End Property
Public ReadOnly Property OpenToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 2)
End Get
End Property
Public ReadOnly Property SaveToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 3)
End Get
End Property
Public ReadOnly Property SaveAsToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 4)
End Get
End Property
Public ReadOnly Property InsertToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 5)
End Get
End Property
Public ReadOnly Property ImportToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 6)
End Get
End Property
Public ReadOnly Property ExportToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 7)
End Get
End Property
Public ReadOnly Property OptionsToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 9)
End Get
End Property
Public ReadOnly Property SendFeedbackToolTip As String
Get
Return EgtMsg(MSG_TOPCOMMANDBAR + 13)
End Get
End Property
#End Region ' ToolTip
Private m_DrawIsChecked As Boolean
Public Property DrawIsChecked As Boolean
Get
Return m_DrawIsChecked
End Get
Set(value As Boolean)
If value <> m_DrawIsChecked Then
m_DrawIsChecked = value
SetDrawMode(value)
OnPropertyChanged("DrawIsChecked")
End If
End Set
End Property
Private m_MachiningIsChecked As Boolean
Public Property MachiningIsChecked As Boolean
Get
Return m_MachiningIsChecked
End Get
Set(value As Boolean)
If value <> m_MachiningIsChecked Then
m_MachiningIsChecked = value
SetMachiningMode(value)
End If
End Set
End Property
Private m_DrawIsEnabled As Boolean = True
Public Property DrawIsEnabled As Boolean
Get
Return m_DrawIsEnabled
End Get
Set(value As Boolean)
m_DrawIsEnabled = value
OnPropertyChanged("DrawIsEnabled")
End Set
End Property
Private m_MachiningIsEnabled As Boolean
Public Property MachiningIsEnabled As Boolean
Get
Return m_MachiningIsEnabled
End Get
Set(value As Boolean)
m_MachiningIsEnabled = value
OnPropertyChanged("MachiningIsEnabled")
End Set
End Property
#End Region ' Fields & Properties
#Region "Get & Set"
Friend Function GetProjectMode() As ProjectModeOpt
Return m_ProjectMode
End Function
Private Sub SetDrawMode(value As Boolean)
If value Then
Application.Msn.NotifyColleagues(Application.DRAWMODE_ISCHECKED)
EgtResetCurrMachGroup()
EgtZoom(ZM.ALL)
Application.Msn.NotifyColleagues(Application.LOADOBJTREE)
IniFile.m_ProjectMode = ProjectModeOpt.DRAW
End If
End Sub
Private Sub SetMachiningMode(value As Boolean)
If value Then
Application.Msn.NotifyColleagues(Application.INITIALIZEMACHGROUPS)
Else
' Deevidenzio l'ultima operazione evidenziata
Application.Msn.NotifyColleagues(Application.REMOVEMARKFROMLASTOPERATION)
' e deseleziono tutto
EgtDeselectAll()
End If
End Sub
#End Region ' Get & Set
#Region "CONSTRUCTOR"
Sub New()
' Creo riferimento a questa classe in EgtCAM5Map
EgtCAM5Map.SetRefTopCommandBarVM(Me)
' Inizializzo la selezione della modilità Draw all'apertura del programma
DrawIsChecked = True
Application.Msn.Register(Application.SETMACHININGMODE, Sub()
MachiningIsChecked = True
OnPropertyChanged("MachiningIsChecked")
End Sub)
Application.Msn.Register(Application.MACHGROUPSRESULT, Sub(bOk As Boolean)
If bOk Then
'EgtZoom(ZM.ALL)
Application.Msn.NotifyColleagues(Application.UPDATECURRENTMACHINE)
Application.Msn.NotifyColleagues(Application.MACHININGMODE_ISCHECKED)
Application.Msn.NotifyColleagues(Application.UPDATEOPERATIONMACHININGLIST)
IniFile.m_ProjectMode = ProjectModeOpt.MACHINING
Else
m_MachiningIsChecked = False
' Error loading or creating Machining Group - Error
MessageBox.Show(EgtMsg(10008), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error)
End If
End Sub)
Application.Msn.Register(Application.MAINWINDOW_CONTENTRENDERED, Sub()
If IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Then
MachiningIsEnabled = False
Else
MachiningIsEnabled = True
End If
End Sub)
Application.Msn.Register(Application.SETDRAWISENABLED, Sub(DrawIsEnabled As Boolean)
Me.DrawIsEnabled = DrawIsEnabled
End Sub)
End Sub
#End Region
#Region "COMMANDS"
#Region "NewCommand"
'''
''' Returns a command that do New.
'''
Public ReadOnly Property NewCommand As ICommand
Get
If m_cmdNew Is Nothing Then
m_cmdNew = New RelayCommand(AddressOf NewCmd)
End If
Return m_cmdNew
End Get
End Property
'''
''' Execute the New. This method is invoked by the NewCommand.
'''
Friend Sub NewCmd()
EgtCAM5Map.refProjectVM.GetController.NewProject(True)
Application.Msn.NotifyColleagues(Application.SELECTIDINOBJTREENOMARK, EgtGetCurrLayer())
OnPropertyChanged("MruFileNames")
End Sub
#End Region ' NewCommand
#Region "OpenCommand"
'''
''' Returns a command that do Open.
'''
Public ReadOnly Property OpenCommand As ICommand
Get
If m_cmdOpen Is Nothing Then
m_cmdOpen = New RelayCommand(AddressOf Open)
End If
Return m_cmdOpen
End Get
End Property
'''
''' Execute the Open. This method is invoked by the OpenCommand.
'''
Friend Sub Open()
OpenProject(String.Empty)
End Sub
Friend Sub OpenProject(sFilePath As String)
If String.IsNullOrEmpty(sFilePath) Then
Dim sDir As String = String.Empty
GetPrivateProfileString(S_GENERAL, K_LASTNGEDIR, "", sDir)
EgtCAM5Map.refProjectVM.GetController.OpenProject(sDir)
Else
EgtCAM5Map.refProjectVM.GetController.OpenProject(sFilePath, False)
End If
Application.Msn.NotifyColleagues(Application.SELECTIDINOBJTREENOMARK, EgtGetCurrLayer())
End Sub
#End Region ' OpenCommand
#Region "OpenMruFileCommand"
'''
''' Returns a command that do Open.
'''
Public ReadOnly Property OpenMruFileCommand As ICommand
Get
If m_cmdOpenMruFile Is Nothing Then
m_cmdOpenMruFile = New RelayCommand(AddressOf OpenMruFile)
End If
Return m_cmdOpenMruFile
End Get
End Property
'''
''' Execute the Open. This method is invoked by the OpenCommand.
'''
Public Sub OpenMruFile(ByVal param As Object)
OpenProject(DirectCast(param, String).Replace("__", "_"))
End Sub
#End Region ' OpenMruFileCommand
#Region "SaveCommand"
'''
''' Returns a command that do Save.
'''
Public ReadOnly Property SaveCommand As ICommand
Get
If m_cmdSave Is Nothing Then
m_cmdSave = New RelayCommand(AddressOf Save)
End If
Return m_cmdSave
End Get
End Property
'''
''' Execute the Save. This method is invoked by the SaveCommand.
'''
Public Sub Save(ByVal param As Object)
Application.Msn.NotifyColleagues(Application.SAVEPROJECT)
End Sub
#End Region ' SaveCommand
#Region "SaveAsCommand"
'''
''' Returns a command that do SaveAs.
'''
Public ReadOnly Property SaveAsCommand As ICommand
Get
If m_cmdSaveAs Is Nothing Then
m_cmdSaveAs = New RelayCommand(AddressOf SaveAs)
End If
Return m_cmdSaveAs
End Get
End Property
'''
''' Execute the SaveAs. This method is invoked by the SaveAsCommand.
'''
Public Sub SaveAs(ByVal param As Object)
Application.Msn.NotifyColleagues(Application.SAVEASPROJECT)
End Sub
#End Region ' SaveAsCommand
#Region "InsertCommand"
'''
''' Returns a command that do Insert.
'''
Public ReadOnly Property InsertCommand As ICommand
Get
If m_cmdInsert Is Nothing Then
m_cmdInsert = New RelayCommand(AddressOf Insert)
End If
Return m_cmdInsert
End Get
End Property
'''
''' Execute the Insert. This method is invoked by the InsertCommand.
'''
Public Sub Insert(ByVal param As Object)
Application.Msn.NotifyColleagues(Application.INSERTPROJECT)
End Sub
#End Region ' InsertCommand
#Region "ImportCommand"
'''
''' Returns a command that do Import.
'''
Public ReadOnly Property ImportCommand As ICommand
Get
If m_cmdImport Is Nothing Then
m_cmdImport = New RelayCommand(AddressOf Import)
End If
Return m_cmdImport
End Get
End Property
'''
''' Execute the Import. This method is invoked by the ImportCommand.
'''
Public Sub Import(ByVal param As Object)
Application.Msn.NotifyColleagues(Application.IMPORTPROJECT)
End Sub
#End Region ' ImportCommand
#Region "ExportCommand"
'''
''' Returns a command that do Export.
'''
Public ReadOnly Property ExportCommand As ICommand
Get
If m_cmdExport Is Nothing Then
m_cmdExport = New RelayCommand(AddressOf Export)
End If
Return m_cmdExport
End Get
End Property
'''
''' Execute the Export. This method is invoked by the ExportCommand.
'''
Public Sub Export(ByVal param As Object)
Application.Msn.NotifyColleagues(Application.EXPORTPROJECT)
End Sub
#End Region ' ExportCommand
#Region "OptionsCommand"
'''
''' Returns a command that do Export.
'''
Public ReadOnly Property OptionsCommand As ICommand
Get
If m_cmdOptions Is Nothing Then
m_cmdOptions = New RelayCommand(AddressOf Options)
End If
Return m_cmdOptions
End Get
End Property
'''
''' Execute the Export. This method is invoked by the ExportCommand.
'''
Public Sub Options(ByVal param As Object)
Dim OptionsWindow As New OptionsView
OptionsWindow.Height = 614
OptionsWindow.Width = 1024
OptionsWindow.DataContext = New OptionsViewModel
OptionsWindow.Owner = Application.Current.MainWindow
OptionsWindow.ShowDialog()
End Sub
#End Region ' OptionsCommand
#Region "SendFeedbackCommand"
'''
''' Returns a command that do SendFeedback.
'''
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 SendFeedback. This method is invoked by the SendFeedbackCommand.
'''
Public Sub SendFeedback(ByVal param As Object)
' Recupero indirizzo a cui spedire la mail
Dim sSupportAddress As String = String.Empty
GetPrivateProfileString(S_GENERAL, K_SUPPORT, "support@egaltech.com", 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)
' se nome file vuoto, chiedo se si vuole salvare
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)
' se modificato, chiedo se si vuole salvare
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
' Verifico se il progetto corrente è una porta
Dim nPartId As Integer = EgtGetFirstPart()
If nPartId = GDB_ID.NULL Then
nPartId = EgtGetFirstPartInRawPart(EgtGetFirstRawPart())
End If
Dim sPartName As String = String.Empty
EgtGetName(nPartId, sPartName)
Dim bPrjIsDoor As Boolean = (String.Compare(sPartName, "DOOR") = 0)
' Recupero macchine dei gruppi di lavoro del progetto
Dim Machines As New List(Of String)
Dim nMchGrpId As Integer = EgtGetFirstMachGroup()
While nMchGrpId <> GDB_ID.NULL
Dim sMachineName As String = String.Empty
EgtGetMachGroupMachineName(nMchGrpId, sMachineName)
If Not String.IsNullOrWhiteSpace(sMachineName) Then
Machines.Add(sMachineName)
End If
nMchGrpId = EgtGetNextMachGroup(nMchGrpId)
End While
' Recupero altri file con lo stesso nome del progetto
Dim OtherFiles As New List(Of String)
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
OtherFiles.Add(TempFiles(FileIndex))
End If
Next
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 macchine
For Each sMachineName As String In Machines
Dim sMachineDir As String = IniFile.m_sMachinesRoot & "\" & sMachineName
If Directory.Exists(sMachineDir) Then
zip.AddItem(sMachineDir, sMachineName)
End If
Next
' aggiungo progetto corrente
If Not String.IsNullOrWhiteSpace(sCurrProject) Then
zip.AddItem(sCurrProject, "")
End If
' aggiungo file log
zip.AddItem(IniFile.m_sLogFile, "")
' aggiungo file ausiliari
For Each sOther As String In OtherFiles
zip.AddItem(sOther, "")
Next
' se door attivo, progetto corrente è una porta e definito direttorio base di Doors
If IniFile.IsActiveDoors And bPrjIsDoor And Directory.Exists(IniFile.m_sDoorsDirPath) Then
' aggiungo Doors completo
zip.AddItem(IniFile.m_sDoorsDirPath, "Doors")
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
Dim bEx As Boolean = False
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)
bEx = True
End Try
If bEx OrElse EgtWPFLib5.MapiMailMessage.m_ErrorCode <> 0 Then
MessageBox.Show(String.Format(EgtMsg(MSG_TOPCOMMANDBAR + 12), sSupportAddress, sZipToCreate), EgtMsg(MSG_MESSAGEBOX + 3), MessageBoxButton.OK, MessageBoxImage.Information)
Else
Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSOUTPUT, EgtMsg(MSG_TOPCOMMANDBAR + 14))
End If
End Sub
#End Region ' SendFeedbackCommand
#End Region ' Commands
End Class
End Namespace