diff Glimpse/Glimpse Services/GlimpseService.vb @ 59:3591c26bd63e

MVVMLight added
author Steven Hollidge <stevenhollidge@hotmail.com>
date Sat, 21 Apr 2012 19:20:28 +0100
parents
children 536498832a79
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Glimpse/Glimpse Services/GlimpseService.vb	Sat Apr 21 19:20:28 2012 +0100
@@ -0,0 +1,151 @@
+Imports System.Diagnostics
+Imports System.Collections.ObjectModel
+Imports System.ComponentModel
+
+Public Class GlimpseService
+
+#Region " Declarations "
+
+    Private Shared _instance As GlimpseService
+    Private _objGlimpseWindow As ChildWindow
+    Private _objHostExceptions As New ObservableCollection(Of ExceptionWrapper)
+    Private _strHostApplicationName As String = String.Empty
+    Private WithEvents _objApp As Application
+    Private WithEvents _objRootVisual As FrameworkElement
+
+#End Region
+
+#Region " Properties "
+
+    Public Shared ReadOnly Property CreateInstance() As GlimpseService
+        Get
+
+            If _instance Is Nothing Then
+                _instance = New GlimpseService
+            End If
+
+            Return _instance
+        End Get
+    End Property
+
+    Friend Property App() As Application
+        Get
+            Return _objApp
+        End Get
+        Set(ByVal Value As Application)
+            _objApp = Value
+        End Set
+    End Property
+
+    Friend Property GlimpseWindow() As ChildWindow
+        Get
+            Return _objGlimpseWindow
+        End Get
+
+        Private Set(ByVal Value As ChildWindow)
+            _objGlimpseWindow = Value
+        End Set
+    End Property
+
+    Friend Property HostApplicationName() As String
+        Get
+            Return _strHostApplicationName
+        End Get
+        Set(ByVal Value As String)
+            _strHostApplicationName = Value
+        End Set
+    End Property
+
+    Friend ReadOnly Property HostExceptions() As ObservableCollection(Of ExceptionWrapper)
+        Get
+            Return _objHostExceptions
+        End Get
+    End Property
+
+    Friend Property RootVisual() As FrameworkElement
+        Get
+            Return _objRootVisual
+        End Get
+        Set(ByVal Value As FrameworkElement)
+            _objRootVisual = Value
+        End Set
+    End Property
+
+#End Region
+
+#Region " Creation and Loading "
+
+    Public Sub DisplayLoadFailure(ByVal objApp As Application, ByVal ex As Exception, ByVal strHostApplicationName As String)
+        Debug.WriteLine(String.Format("{0} had exception. {1}", Me.HostApplicationName, ex.ToString))
+        _objApp = objApp
+        _objApp.RootVisual = New LoadExceptionViewer(ex, strHostApplicationName)
+    End Sub
+
+    Public Sub Load(ByVal objApp As Application, ByVal strHostApplicationName As String)
+        Me.App = objApp
+        Me.RootVisual = TryCast(objApp.RootVisual, FrameworkElement)
+        Me.HostApplicationName = strHostApplicationName
+
+        Dim fw As New ChildWindow
+        fw.Title = Me.HostApplicationName
+        fw.Content = New GlimpseViewer
+
+        If Double.IsNaN(Me.RootVisual.Width) Then
+            'if the host control is autosized (consumes the browser window) then locate Glimpse in the top, left
+            fw.Show()
+
+        Else
+
+            'if the host is fixed size then attempt to locate the popup control in the upper right corner
+            Dim dblLeft As Double = Me.RootVisual.Width - 200
+
+            If dblLeft < 0 Then
+                dblLeft = 0
+            End If
+
+            fw.Show()
+        End If
+
+    End Sub
+
+    Private Sub New()
+    End Sub
+
+#End Region
+
+#Region " Host Application Events "
+
+    Private Sub _objHostRootVisual_BindingValidationError(ByVal sender As Object, ByVal e As System.Windows.Controls.ValidationErrorEventArgs) Handles _objRootVisual.BindingValidationError
+
+        Dim strControlName As String = "(none)"
+        Dim objControl As Control = TryCast(e.OriginalSource, Control)
+
+        If objControl IsNot Nothing AndAlso Not String.IsNullOrEmpty(objControl.Name) Then
+            strControlName = objControl.Name
+        End If
+
+        Dim ex As Exception = e.Error.Exception
+
+        While ex IsNot Nothing
+            Me.HostExceptions.Add(New ExceptionWrapper(e.Action, strControlName, e.Error.Exception))
+            ex = ex.InnerException
+        End While
+
+    End Sub
+
+    Private Sub Application_UnhandledException(ByVal sender As Object, ByVal e As ApplicationUnhandledExceptionEventArgs) Handles _objApp.UnhandledException
+        Debug.WriteLine(String.Format("{0} had exception.  {1}", Me.HostApplicationName, e.ExceptionObject.ToString))
+
+        Dim ex As Exception = e.ExceptionObject
+
+        While ex IsNot Nothing
+            Me.HostExceptions.Add(New ExceptionWrapper(ex))
+            ex = ex.InnerException
+        End While
+
+        e.Handled = True
+    End Sub
+
+#End Region
+
+End Class