Namespace SoloViewSerg
Friend Class ssTask
Friend Sub New(ByVal aDocumentFullPath As String, ByVal aLastBackupTime As Date)
_DocumentFullPath = aDocumentFullPath
_LastBackupTime = aLastBackupTime
End Sub
Private _DocumentFullPath As String
Friend ReadOnly Property DocumentFullPath As String
Get
Return _DocumentFullPath
End Get
End Property
Private _LastBackupTime As Date
Friend ReadOnly Property LastBackupTime As Date
Get
Return _LastBackupTime
End Get
End Property
Private _Guid As Guid = Guid.NewGuid
Friend ReadOnly Property Guid As Guid
Get
Return _Guid
End Get
End Property
End Class
End Namespace
Imports System
Imports Autodesk.Revit.UI
Imports Autodesk.Revit.DB
Imports Autodesk.Revit.ApplicationServices
Imports Autodesk.Revit.Creation
'Imports Autodesk.Revit.Utility
'Imports Autodesk.Revit.VSTA
Imports System.Drawing
Imports System.Windows.Media.Imaging
Imports System.Reflection
Imports System.Windows.Media
Imports SoloViewSerg.ssApplication
Imports SoloViewSerg.ssModel
Imports System.IO
Namespace SoloViewSerg
Friend Class ssAddRibbonPanel
Implements Autodesk.Revit.UI.IExternalApplication
Friend Shared pTaskProcessor As ssTaskProcessor
Public Sub ApplicationDocumentClosing(sender As Object, e As Autodesk.Revit.DB.Events.DocumentClosingEventArgs)
Try
'RemoveTaskProcessorTaskByDocumentFullPath
Dim aTask As ssTask
SyncLock pTaskProcessor.Tasks
For i As Int32 = 0 To pTaskProcessor.Tasks.Count - 1
aTask = pTaskProcessor.Tasks.Item(i)
If aTask IsNot Nothing AndAlso aTask.DocumentFullPath = e.Document.PathName Then
pTaskProcessor.Tasks.RemoveAt(i)
End If
Next
End SyncLock
Catch ex As System.Exception
BuildErrorMessage(ex, False)
Finally
End Try
End Sub
Public Sub ApplicationDocumentSavedAs(sender As Object, e As Autodesk.Revit.DB.Events.DocumentSavedAsEventArgs)
Try
'RemoveTaskProcessorTaskByDocumentFullPath
Dim aTask As ssTask
SyncLock pTaskProcessor.Tasks
For i As Int32 = 0 To pTaskProcessor.Tasks.Count - 1
aTask = pTaskProcessor.Tasks.Item(i)
If aTask IsNot Nothing AndAlso aTask.DocumentFullPath = pActiveDocumentFullPath Then
pTaskProcessor.Tasks.RemoveAt(i)
End If
Next
End SyncLock
'Document Backup
pActiveDocumentFullPath = e.Document.PathName
pActiveDocument = e.Document
If pDocBackupON = True Then
'AddTaskProcessorTaskByDocumentFullPath
If pTaskProcessor Is Nothing Then
pTaskProcessor = New ssTaskProcessor
pTaskProcessor.Start()
ElseIf pTaskProcessor.IsCompleted = True Then
Dim aTasks As ArrayList = pTaskProcessor.Tasks
pTaskProcessor = New ssTaskProcessor
pTaskProcessor.Tasks = aTasks
pTaskProcessor.Start()
End If
pTaskProcessor.SubmitTask(New ssTask(pActiveDocumentFullPath, DateTime.MinValue))
Else
If pTaskProcessor IsNot Nothing Then
pTaskProcessor.Stop()
End If
End If
Catch ex As System.Exception
BuildErrorMessage(ex, False)
Finally
End Try
End Sub
Public Sub ApplicationDocumentOpened(sender As Object, e As Autodesk.Revit.DB.Events.DocumentOpenedEventArgs)
Try
Dim textFields As String() = Nothing
Dim errString As String = String.Empty, errDescription As String = String.Empty
Dim aFontFamilyName As String = "Arial", aFontSize As Single = 10.0F, aFontItalic As Boolean = True, aFontUnderline As Boolean, aFontBold As Boolean, aFontStrikethrough As Boolean
Dim alocalInterfaceLanguage As ssInterfaceLanguagesEnum = InterfaceLanguage
pActiveDocumentFullPath = e.Document.PathName
pActiveDocument = e.Document
Try
'ReadSaveFaceDocBackup
Call ReadSaveFace(textFields, errString, errDescription,
aFontFamilyName, aFontSize, aFontItalic, aFontUnderline, aFontBold, aFontStrikethrough,
alocalInterfaceLanguage)
If errString <> String.Empty OrElse textFields Is Nothing OrElse textFields.Length < 19 Then
If dlgMain IsNot Nothing Then
MsgBox(ResourceManagerMainShadow.GetString("Error read Data:", curUICulture) & vbCrLf &
errString & vbCrLf &
errDescription & vbCrLf &
ResourceManagerMainShadow.GetString("Application options will be set by default.", curUICulture), vbInformation + vbOKOnly, ResourceManagerMainShadow.GetString("Application Name", curUICulture))
End If
pDocBackupON = False
pDocBackupInterval = 6000 ' 600000
pBackupFolder = "С:\" ' "D:\Revit MEP Projects 2013\DocumentBackup\"
Else
End If
Catch ex As System.Exception
BuildErrorMessage(ex, False)
Finally
End Try
'Check pBackupFolder
Dim aBackupDirectory As DirectoryInfo = Nothing
If String.IsNullOrWhiteSpace(pBackupFolder) = False Then
aBackupDirectory = New DirectoryInfo(pBackupFolder)
End If
If aBackupDirectory Is Nothing OrElse aBackupDirectory.Exists = False Then
'DisableBackup
pDocBackupON = False
If dlgMain IsNot Nothing Then
MsgBox(ResourceManagerMainShadow.GetString("Document Backup Folder", curUICulture) & vbCrLf &
pBackupFolder & vbCrLf &
ResourceManagerMainShadow.GetString("is NOT exist!", curUICulture) & vbCrLf & vbCrLf &
ResourceManagerMainShadow.GetString("Unfortunately,", curUICulture) & " " & ResourceManagerMainShadow.GetString("Asynchronous Document Backup", curUICulture) & " " &
ResourceManagerMainShadow.GetString("is impossible.", curUICulture) & vbCrLf &
ResourceManagerMainShadow.GetString("Try to set up exiting backup folder. Current session backup will be disabled.", curUICulture), vbCritical, ResourceManagerMainShadow.GetString("Application Name", curUICulture))
End If
End If
'Document Backup
If pDocBackupON = True Then
If pTaskProcessor Is Nothing Then
pTaskProcessor = New ssTaskProcessor
pTaskProcessor.Start()
ElseIf pTaskProcessor.IsCompleted = True Then
Dim aTasks As ArrayList = pTaskProcessor.Tasks
pTaskProcessor = New ssTaskProcessor
pTaskProcessor.Tasks = aTasks
pTaskProcessor.Start()
End If
pTaskProcessor.SubmitTask(New ssTask(pActiveDocumentFullPath, DateTime.MinValue))
Else
If pTaskProcessor IsNot Nothing Then
pTaskProcessor.Stop()
End If
End If
Catch ex As System.Exception
BuildErrorMessage(ex, False)
Finally
End Try
End Sub
Public Function OnShutdown(application As Autodesk.Revit.UI.UIControlledApplication) As Autodesk.Revit.UI.Result Implements Autodesk.Revit.UI.IExternalApplication.OnShutdown
Try
RemoveHandler application.ControlledApplication.DocumentOpened, AddressOf ApplicationDocumentOpened
RemoveHandler application.ControlledApplication.DocumentSavedAs, AddressOf ApplicationDocumentSavedAs
RemoveHandler application.ControlledApplication.DocumentClosing, AddressOf ApplicationDocumentClosing
'Document Backup
pTaskProcessor.Stop()
Return (Result.Succeeded)
Catch ex As System.Exception
BuildErrorMessage(ex, False)
Return (Result.Failed)
Finally
End Try
End Function
Public Function OnStartup(application As Autodesk.Revit.UI.UIControlledApplication) As Autodesk.Revit.UI.Result Implements Autodesk.Revit.UI.IExternalApplication.OnStartup
Try
Dim ssRevitUtilitesAssembly As [Assembly]
ssRevitUtilitesAssembly = [Assembly].GetAssembly(Me.GetType)
Dim projectFullPath As String = ssRevitUtilitesAssembly.Location
pProjectPath = ssRevitUtilitesAssembly.Location.Substring(0, ssRevitUtilitesAssembly.Location.LastIndexOf("\") + 1)
AddHandler application.ControlledApplication.DocumentOpened, AddressOf ApplicationDocumentOpened
AddHandler application.ControlledApplication.DocumentSavedAs, AddressOf ApplicationDocumentSavedAs
AddHandler application.ControlledApplication.DocumentClosing, AddressOf ApplicationDocumentClosing
' add new ribbon panel
Dim ribbonPanel As RibbonPanel = application.CreateRibbonPanel("ssRevitUtilitesRibbonPanel")
Dim PushButton1 As PushButton = ribbonPanel.AddItem(New PushButtonData("SoloViewSerg - ssRevitUtilites", "SoloViewSerg - ssRevitUtilites", projectFullPath, "SoloViewSerg.ssCommand"))
PushButton1.SetContextualHelp(New ContextualHelp(ContextualHelpType.ChmFile, pProjectPath & "ssUtilites_EN.html"))
Dim largeImage As BitmapImage = New BitmapImage(New Uri(pProjectPath & "ssRevitUtilites.ico"))
PushButton1.LargeImage = largeImage
Return Result.Succeeded
Catch ex As Exception
BuildErrorMessage(ex, False)
Return Result.Failed
End Try
End Function
...
End Class
End Namespace