Imports System.Collections.ObjectModel Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Public Class TopCommandBarVM Inherits VMBase #Region "FIELDS & PROPERTIES" Friend m_MruFiles As New MruList Public ReadOnly Property MruFileNames As ObservableCollection(Of String) Get Return m_MruFiles.FileNames End Get End Property Private m_IsEnabled As Boolean Public Property IsEnabled As Boolean Get Return m_IsEnabled End Get Set(value As Boolean) If value <> m_IsEnabled Then m_IsEnabled = value NotifyPropertyChanged("IsEnabled") End If End Set End Property ' Definizione comandi Private m_cmdNew As ICommand Private m_cmdOpen As ICommand Private m_cmdOpenMruFile As ICommand Private m_cmdSave As ICommand Private m_cmdSaveAs As ICommand Private m_cmdExport As ICommand Private m_cmdOptions As ICommand Private m_cmdSendFeedback As ICommand #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 #End Region ' Fields & Properties #Region "CONSTRUCTOR" Sub New() ' Creo riferimento a questa classe in OmagOFFICEMap OmagOFFICEMap.SetRefTopCommandBarVM(Me) ' Impostazioni MruLists m_MruFiles.Init(S_MRUFILES, 8) End Sub #End Region ' CONSTRUCTOR #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 Command(AddressOf NewCmd) End If Return m_cmdNew End Get End Property ''' ''' Execute the New. This method is invoked by the NewCommand. ''' Friend Sub NewCmd(Optional bUseDefaults As Boolean = False) OmagOFFICEMap.refSceneHostVM.NewProject() OmagOFFICEMap.refMachGroupPanelVM.InitMachGroupList(bUseDefaults) 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 Command(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) OmagOFFICEMap.refSceneHostVM.OpenProject(sFilePath) OmagOFFICEMap.refMachGroupPanelVM.InitMachGroupList() 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 Command(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 Command(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) OmagOFFICEMap.refSceneHostVM.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 Command(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) OmagOFFICEMap.refSceneHostVM.SaveAsProject() End Sub #End Region ' SaveAsCommand #Region "ExportCommand" ''' ''' Returns a command that do Export. ''' Public ReadOnly Property ExportCommand As ICommand Get If m_cmdExport Is Nothing Then m_cmdExport = New Command(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) OmagOFFICEMap.refSceneHostVM.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 Command(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 OptionWindowV 'OptionsWindow.Height = 614 'OptionsWindow.Width = 1024 OptionsWindow.DataContext = New OptionWindowVM 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 Command(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 GetMainPrivateProfileString(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 OmagOFFICEMap.refSceneHostVM.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 OmagOFFICEMap.refSceneHostVM.SaveProject() End If End If End If ' 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) AndAlso Machines.IndexOf(sMachineName) < 0 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) AndAlso Directory.Exists(sCurrProjectDir) Then Dim sTitleName As String = Path.GetFileNameWithoutExtension(sCurrProject) Dim TempFiles() As String = Directory.GetFiles(sCurrProjectDir) For FileIndex = 0 To TempFiles.Count - 1 If Path.GetFileNameWithoutExtension(TempFiles(FileIndex)).Contains(sTitleName) 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 = OmagOFFICEMap.refMainWindowVM.MainWindowM.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 = OmagOFFICEMap.refMainWindowVM.MainWindowM.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(OmagOFFICEMap.refMainWindowVM.MainWindowM.sLogFile, "") ' aggiungo file ausiliari For Each sOther As String In OtherFiles zip.AddItem(sOther, "") Next ' 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("OmagOFFICE Feedback - " & sKey) SendFeedbackWindow.Recipients.Add(sSupportAddress) If Not String.IsNullOrWhiteSpace(sZipToCreate) AndAlso File.Exists(sZipToCreate) Then SendFeedbackWindow.Files.Add(OmagOFFICEMap.refMainWindowVM.MainWindowM.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 ' Mandare il feedback a xxx con allegata la cartella yyy. Dim sText As String = String.Format(EgtMsg(MSG_TOPCOMMANDBAR + 12), sSupportAddress, sZipToCreate) MessageBox.Show(sText, EgtMsg(MSG_MESSAGEBOX + 3), MessageBoxButton.OK, MessageBoxImage.Information) Else ' Mail di feedback pronta. OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_TOPCOMMANDBAR + 14), 10, MSG_TYPE.INFO) End If End Sub #End Region ' SendFeedbackCommand #End Region ' Commands End Class