From ccb3ff82d0563d61e755c96acad4e6b10c105194 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 3 Sep 2015 00:44:54 +0300 Subject: [PATCH] Designer: Added apphost log --- .../AppHost/PerspexAppHost.cs | 31 +++++++++++++++++-- .../Perspex.Designer/PerspexDesigner.xaml | 2 +- .../Perspex.Designer/PerspexDesigner.xaml.cs | 4 +-- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/Windows/Perspex.Designer/AppHost/PerspexAppHost.cs b/src/Windows/Perspex.Designer/AppHost/PerspexAppHost.cs index 88861628a6..52b065a3d9 100644 --- a/src/Windows/Perspex.Designer/AppHost/PerspexAppHost.cs +++ b/src/Windows/Perspex.Designer/AppHost/PerspexAppHost.cs @@ -16,6 +16,7 @@ namespace Perspex.Designer.AppHost private CommChannel _comm; private Func _xamlReader; private WindowHost _host; + private bool _initSuccess; public PerspexAppHost(CommChannel channel) { @@ -43,6 +44,8 @@ namespace Perspex.Designer.AppHost private void UpdateXaml(string xaml) { + if(!_initSuccess) + return; dynamic window = Activator.CreateInstance(LookupType("Perspex.Controls.Window")); _xamlReader(new MemoryStream(Encoding.UTF8.GetBytes(xaml)), window); var hWnd = (IntPtr) window.PlatformImpl.Handle; @@ -75,17 +78,38 @@ namespace Perspex.Designer.AppHost } private void Init(string targetExe) + { + var log = new StringBuilder(); + try + { + DoInit(targetExe, log); + } + catch (Exception e) + { + UpdateState("Unable to load Perspex:\n\n" + e + "\n\n" + log); + } + } + private void DoInit(string targetExe, StringBuilder logger) { _appDir = Path.GetFullPath(Path.GetDirectoryName(targetExe)); Directory.SetCurrentDirectory(_appDir); - UpdateState("Loading assemblies"); + Action log = s => + { + UpdateState(s); + logger.AppendLine(s); + }; + log("Loading assemblies"); foreach(var asm in Directory.GetFiles(_appDir).Where(f=>f.ToLower().EndsWith(".dll")||f.ToLower().EndsWith(".exe"))) try { + log("Trying to load " + asm); Assembly.LoadFrom(asm); } - catch { } - UpdateState("Looking up Perspex types"); + catch (Exception e) + { + logger.AppendLine(e.ToString()); + } + log("Looking up Perspex types"); var app = Activator.CreateInstance(LookupType("Perspex.Application")); app.GetType() @@ -107,6 +131,7 @@ namespace Perspex.Designer.AppHost _xamlReader = (stream, root) => xamlLoader.Load(stream, root); _host = new WindowHost(); _comm.SendMessage(new WindowCreatedMessage(_host.Handle)); + _initSuccess = true; } private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) diff --git a/src/Windows/Perspex.Designer/PerspexDesigner.xaml b/src/Windows/Perspex.Designer/PerspexDesigner.xaml index 87fff98123..fa25a9586c 100644 --- a/src/Windows/Perspex.Designer/PerspexDesigner.xaml +++ b/src/Windows/Perspex.Designer/PerspexDesigner.xaml @@ -8,7 +8,7 @@ - + diff --git a/src/Windows/Perspex.Designer/PerspexDesigner.xaml.cs b/src/Windows/Perspex.Designer/PerspexDesigner.xaml.cs index ff9557a23b..6cce62a1ec 100644 --- a/src/Windows/Perspex.Designer/PerspexDesigner.xaml.cs +++ b/src/Windows/Perspex.Designer/PerspexDesigner.xaml.cs @@ -58,8 +58,8 @@ namespace Perspex.Designer public PerspexDesigner() { InitializeComponent(); - BindingOperations.SetBinding(State, TextBlock.TextProperty, - new Binding(nameof(ProcessHost.State)) {Source = _host}); + BindingOperations.SetBinding(State, TextBox.TextProperty, + new Binding(nameof(ProcessHost.State)) {Source = _host, Mode = BindingMode.OneWay}); _host.PropertyChanged += _host_PropertyChanged; }