| /****************************************************************************  | 
| **  | 
| ** Copyright (C) 2020 The Qt Company Ltd.  | 
| ** Contact: https://www.qt.io/licensing/  | 
| **  | 
| ** This file is part of the Qt VS Tools.  | 
| **  | 
| ** $QT_BEGIN_LICENSE:GPL-EXCEPT$  | 
| ** Commercial License Usage  | 
| ** Licensees holding valid commercial Qt licenses may use this file in  | 
| ** accordance with the commercial license agreement provided with the  | 
| ** Software or, alternatively, in accordance with the terms contained in  | 
| ** a written agreement between you and The Qt Company. For licensing terms  | 
| ** and conditions see https://www.qt.io/terms-conditions. For further  | 
| ** information use the contact form at https://www.qt.io/contact-us.  | 
| **  | 
| ** GNU General Public License Usage  | 
| ** Alternatively, this file may be used under the terms of the GNU  | 
| ** General Public License version 3 as published by the Free Software  | 
| ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT  | 
| ** included in the packaging of this file. Please review the following  | 
| ** information to ensure the GNU General Public License requirements will  | 
| ** be met: https://www.gnu.org/licenses/gpl-3.0.html.  | 
| **  | 
| ** $QT_END_LICENSE$  | 
| **  | 
| ****************************************************************************/  | 
|   | 
| using System;  | 
| using System.Diagnostics;  | 
| using System.IO;  | 
| using System.Runtime.InteropServices;  | 
| using System.Threading.Tasks;  | 
| using Microsoft.VisualStudio.Shell.Interop;  | 
| using QtVsTools.QtMsBuild;  | 
| using QtVsTools.VisualStudio;  | 
|   | 
| namespace QtVsTools.Editors  | 
| {  | 
|     [Guid(GuidString)]  | 
|     public class QtDesigner : Editor  | 
|     {  | 
|         public const string GuidString = "96FE523D-6182-49F5-8992-3BEA5F7E6FF6";  | 
|         public const string Title = "Qt Designer";  | 
|   | 
|         Guid? _Guid;  | 
|         public override Guid Guid => (_Guid ?? (_Guid = new Guid(GuidString))).Value;  | 
|   | 
|         public override string ExecutableName => "designer.exe";  | 
|   | 
|         public override Func<string, bool> WindowFilter =>  | 
|             caption => caption.StartsWith(Title);  | 
|   | 
|         protected override string GetTitle(Process editorProcess)  | 
|         {  | 
|             return Title;  | 
|         }  | 
|   | 
|         protected override void OnStart(Process process)  | 
|         {  | 
|             base.OnStart(process);  | 
|             var document = VsShell.GetDocument(Context, ItemId);  | 
|             if (document == null)  | 
|                 return;  | 
|             var project = document.ProjectItem?.ContainingProject;  | 
|             if (project == null || !QtProjectTracker.IsTracked(project))  | 
|                 return;  | 
|             string filePath = document.FullName;  | 
|             string[] itemId = new[] { document.ProjectItem?.Name };  | 
|             var lastWriteTime = File.GetLastWriteTime(filePath);  | 
|             Task.Run(() =>  | 
|             {  | 
|                 while (!process.WaitForExit(1000)) {  | 
|                     var latestWriteTime = File.GetLastWriteTime(filePath);  | 
|                     if (lastWriteTime != latestWriteTime) {  | 
|                         lastWriteTime = latestWriteTime;  | 
|                         QtProjectIntellisense.Refresh(project, selectedFiles: itemId);  | 
|                     }  | 
|                 }  | 
|                 if (lastWriteTime != File.GetLastWriteTime(filePath)) {  | 
|                     QtProjectIntellisense.Refresh(project, selectedFiles: itemId);  | 
|                 }  | 
|             });  | 
|         }  | 
|   | 
|         protected override bool Detached => QtVsToolsPackage.Instance.Options.DesignerDetached;  | 
|     }  | 
| }  |