| | |
| | | /****************************************************************************
|
| | | **
|
| | | ** Copyright (C) 2020 The Qt Company Ltd.
|
| | | ** Copyright (C) 2022 The Qt Company Ltd.
|
| | | ** Contact: https://www.qt.io/licensing/
|
| | | **
|
| | | ** This file is part of the Qt VS Tools.
|
| | |
| | |
|
| | | using System;
|
| | | using System.Collections.Generic;
|
| | | using System.IO;
|
| | | using System.Linq;
|
| | | using System.Windows;
|
| | | using Microsoft.VisualStudio.Shell;
|
| | | using Microsoft.VisualStudio.Shell.Interop;
|
| | | using QtVsTools.Core;
|
| | |
|
| | | namespace QtVsTools.Options
|
| | | {
|
| | | using Common;
|
| | | using Core;
|
| | | using static QtVsTools.Options.QtVersionsTable;
|
| | |
|
| | | public class QtVersionsPage : UIElementDialogPage
|
| | | {
|
| | | static LazyFactory Lazy { get; } = new LazyFactory();
|
| | |
|
| | | QtVersionManager VersionManager => QtVersionManager.The();
|
| | |
|
| | | QtVersionsTable _VersionsTable;
|
| | | QtVersionsTable VersionsTable => _VersionsTable
|
| | | ?? (_VersionsTable = new QtVersionsTable());
|
| | | QtVersionsTable VersionsTable => Lazy.Get(() =>
|
| | | VersionsTable, () => new QtVersionsTable());
|
| | |
|
| | | protected override UIElement Child => VersionsTable;
|
| | |
|
| | | public override void LoadSettingsFromStorage()
|
| | | {
|
| | | var versions = new List<QtVersionsTable.Row>();
|
| | | var versions = new List<Row>();
|
| | | foreach (var versionName in VersionManager.GetVersions()) {
|
| | | var versionPath = VersionManager.GetInstallPath(versionName);
|
| | | if (string.IsNullOrEmpty(versionPath))
|
| | | continue;
|
| | |
|
| | | BuildHost host = BuildHost.Windows;
|
| | | string compiler = "msvc";
|
| | | if (versionPath.StartsWith("SSH:") || versionPath.StartsWith("WSL:")) {
|
| | |
| | | compiler = linuxPaths[2];
|
| | | }
|
| | | var defaultVersion = VersionManager.GetDefaultVersion();
|
| | | versions.Add(new QtVersionsTable.Row()
|
| | | versions.Add(new Row()
|
| | | {
|
| | | IsDefault = (versionName == defaultVersion),
|
| | | VersionName = versionName,
|
| | | InitialVersionName = versionName,
|
| | | Path = versionPath,
|
| | | Host = host,
|
| | | Compiler = compiler,
|
| | | State = State.Unknown
|
| | | });
|
| | | }
|
| | | VersionsTable.UpdateVersions(versions);
|
| | |
| | |
|
| | | public override void SaveSettingsToStorage()
|
| | | {
|
| | | foreach (var versionName in VersionManager.GetVersions()) {
|
| | | void RemoveVersion(string versionName)
|
| | | {
|
| | | try {
|
| | | VersionManager.RemoveVersion(versionName);
|
| | | } catch (Exception exception) {
|
| | | Messages.Print(
|
| | | exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace);
|
| | | exception.Log();
|
| | | }
|
| | | }
|
| | | foreach (var version in VersionsTable.Versions) {
|
| | |
|
| | | var versions = VersionsTable.Versions;
|
| | | foreach (var version in versions) {
|
| | | if (version.State.HasFlag(State.Removed))
|
| | | RemoveVersion(version.VersionName);
|
| | |
|
| | | if (!version.State.HasFlag(State.Modified))
|
| | | continue;
|
| | |
|
| | | try {
|
| | | if (version.Host == BuildHost.Windows) {
|
| | | var versionInfo = VersionInformation.Get(version.Path);
|
| | | var generator = versionInfo.GetQMakeConfEntry("MAKEFILE_GENERATOR");
|
| | | if (generator != "MSVC.NET" && generator != "MSBUILD")
|
| | | throw new Exception(SR.GetString(
|
| | | "AddQtVersionDialog_IncorrectMakefileGenerator", generator));
|
| | | VersionManager.SaveVersion(version.VersionName, version.Path);
|
| | | if (version.State.HasFlag((State)Column.Path)) {
|
| | | var versionPath = version.Path;
|
| | | var ignoreCase = StringComparison.CurrentCultureIgnoreCase;
|
| | | if (Path.GetFileName(versionPath).Equals("qmake.exe", ignoreCase))
|
| | | versionPath = Path.GetDirectoryName(versionPath);
|
| | | if (Path.GetFileName(versionPath).Equals("bin", ignoreCase))
|
| | | versionPath = Path.GetDirectoryName(versionPath);
|
| | | var versionInfo = VersionInformation.Get(versionPath);
|
| | | var generator = versionInfo.GetQMakeConfEntry("MAKEFILE_GENERATOR");
|
| | | if (generator != "MSVC.NET" && generator != "MSBUILD")
|
| | | throw new Exception(string.Format(
|
| | | "This Qt version uses an unsupported makefile generator (used: "
|
| | | + "{0}, supported: MSVC.NET, MSBUILD)", generator));
|
| | | VersionManager.SaveVersion(version.VersionName, versionPath);
|
| | | }
|
| | | } else {
|
| | | string name = version.VersionName;
|
| | | string access =
|
| | |
| | | path = string.Format("{0}:{1}:{2}", access, path, compiler);
|
| | | VersionManager.SaveVersion(name, path, checkPath: false);
|
| | | }
|
| | |
|
| | | if (version.State.HasFlag((State)Column.VersionName)) {
|
| | | try {
|
| | | VersionManager.SaveVersion(version.VersionName, version.Path);
|
| | | if (!string.IsNullOrEmpty(version.InitialVersionName))
|
| | | VersionManager.RemoveVersion(version.InitialVersionName);
|
| | | } catch (Exception exception) {
|
| | | exception.Log();
|
| | | }
|
| | | }
|
| | | } catch (Exception exception) {
|
| | | Messages.Print(
|
| | | exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace);
|
| | | exception.Log();
|
| | | version.State = State.Removed;
|
| | | RemoveVersion(version.VersionName);
|
| | | }
|
| | | }
|
| | |
|
| | | try {
|
| | | var defaultVersion = VersionsTable.Versions
|
| | | .Where(version => version.IsDefault)
|
| | | .FirstOrDefault();
|
| | | if (defaultVersion != null)
|
| | | VersionManager.SaveDefaultVersion(defaultVersion.VersionName);
|
| | | var defaultVersion =
|
| | | versions.FirstOrDefault(v => v.IsDefault && v.State != State.Removed)
|
| | | ?? versions.FirstOrDefault(v => v.State != State.Removed);
|
| | | VersionManager.SaveDefaultVersion(defaultVersion?.VersionName ?? "");
|
| | | } catch (Exception exception) {
|
| | | Messages.Print(
|
| | | exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace);
|
| | | exception.Log();
|
| | | }
|
| | |
|
| | | if (Notifications.NoQtVersion.IsOpen && VersionManager.GetVersions()?.Any() == true)
|
| | | Notifications.NoQtVersion.Close();
|
| | | }
|
| | |
|
| | | protected override void OnApply(PageApplyEventArgs e)
|