/**************************************************************************** ** ** 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 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; } }