| /****************************************************************************  | 
| **  | 
| ** Copyright (C) 2021 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.ComponentModel;  | 
| using Microsoft.Win32;  | 
| using Microsoft.VisualStudio.Shell;  | 
| using QtVsTools.Core;  | 
|   | 
| namespace QtVsTools.Options  | 
| {  | 
|     public class QtLegacyOptionsPage : DialogPage  | 
|     {  | 
|         [Category(@"Qt VS Project Format v2 (Qt tools integrated via custom-build steps)")]  | 
|         [DisplayName("Source control: Ask before checking out files")]  | 
|         public bool CheckoutPrompt { get; set; }  | 
|   | 
|         [Category(@"Qt VS Project Format v2 (Qt tools integrated via custom-build steps)")]  | 
|         [DisplayName("Source control: Enable file check-out")]  | 
|         public bool Checkout { get; set; }  | 
|   | 
|         [Category(@"Qt VS Project Format v2 (Qt tools integrated via custom-build steps)")]  | 
|         [DisplayName("Linguist: Default lrelease options")]  | 
|         public string DefaultLReleaseOptions { get; set; }  | 
|   | 
|         [Category(@"Qt VS Project Format v2 (Qt tools integrated via custom-build steps)")]  | 
|         [DisplayName("Linguist: Default lupdate options")]  | 
|         public string DefaultLUpdateOptions { get; set; }  | 
|   | 
|         [Category(@"Qt VS Project Format v2 (Qt tools integrated via custom-build steps)")]  | 
|         [DisplayName("Linguist: Run lupdate during build")]  | 
|         public bool EnableLUpdateOnBuild { get; set; }  | 
|   | 
|         [Category(@"Qt VS Project Format v2 (Qt tools integrated via custom-build steps)")]  | 
|         [DisplayName("Meta-Object Compiler: Default moc generated files directory")]  | 
|         public string DefaultMocDir { get; set; }  | 
|   | 
|         [Category(@"Qt VS Project Format v2 (Qt tools integrated via custom-build steps)")]  | 
|         [DisplayName("Meta-Object Compiler: Default additional moc options ")]  | 
|         public string AdditionalMocOptions { get; set; }  | 
|   | 
|         [Category(@"Qt VS Project Format v2 (Qt tools integrated via custom-build steps)")]  | 
|         [DisplayName("Meta-Object Compiler: Enable automatic moc")]  | 
|         public bool AutoMoc { get; set; }  | 
|   | 
|         [Category(@"Qt VS Project Format v2 (Qt tools integrated via custom-build steps)")]  | 
|         [DisplayName("Resource Compiler: Default rcc generated files directory")]  | 
|         public string DefaultRccDir { get; set; }  | 
|   | 
|         [Category(@"Qt VS Project Format v2 (Qt tools integrated via custom-build steps)")]  | 
|         [DisplayName("User Interface Compiler: Default uic generated files directory")]  | 
|         public string DefaultUicDir { get; set; }  | 
|   | 
|         [Category(@"Qt VS Project Format v2 (Qt tools integrated via custom-build steps)")]  | 
|         [DisplayName("Build: Run pre-build setup")]  | 
|         public bool PreBuildSetup { get; set; }  | 
|   | 
|         const string VALUENAME_LegacyPreBuild = "LegacyPreBuild";  | 
|   | 
|         public override void ResetSettings()  | 
|         {  | 
|             CheckoutPrompt = true;  | 
|             Checkout = true;  | 
|             DefaultLReleaseOptions = "";  | 
|             DefaultLUpdateOptions = "";  | 
|             EnableLUpdateOnBuild = false;  | 
|             DefaultMocDir = "";  | 
|             AdditionalMocOptions = "";  | 
|             AutoMoc = true;  | 
|             DefaultRccDir = "";  | 
|             DefaultUicDir = "";  | 
|             PreBuildSetup = false;  | 
|         }  | 
|   | 
|         public override void LoadSettingsFromStorage()  | 
|         {  | 
|             ResetSettings();  | 
|             try {  | 
|                 using (var key = Registry.CurrentUser  | 
|                     .OpenSubKey(@"SOFTWARE\" + Resources.registryPackagePath, writable: false)) {  | 
|                     if (key == null)  | 
|                         return;  | 
|                     if (key.GetValue(Resources.askBeforeCheckoutFileKeyword) is int checkoutPrompt)  | 
|                         CheckoutPrompt = (checkoutPrompt != 0);  | 
|                     if (key.GetValue(Resources.disableCheckoutFilesKeyword) is int disableCheckout)  | 
|                         Checkout = (disableCheckout == 0);  | 
|                     if (key.GetValue(Resources.lreleaseOptionsKeyword) is string lreleaseOptions)  | 
|                         DefaultLReleaseOptions = lreleaseOptions;  | 
|                     if (key.GetValue(Resources.lupdateOptionsKeyword) is string lupdateOptions)  | 
|                         DefaultLUpdateOptions = lupdateOptions;  | 
|                     if (key.GetValue(Resources.lupdateKeyword) is int lupdateOnBuild)  | 
|                         EnableLUpdateOnBuild = (lupdateOnBuild != 0);  | 
|                     if (key.GetValue(Resources.mocDirKeyword) is string mocDir)  | 
|                         DefaultMocDir = mocDir;  | 
|                     if (key.GetValue(Resources.mocOptionsKeyword) is string mocOptions)  | 
|                         AdditionalMocOptions = mocOptions;  | 
|                     if (key.GetValue(Resources.disableAutoMocStepsUpdateKeyword) is int autoMocOff)  | 
|                         AutoMoc = (autoMocOff == 0);  | 
|                     if (key.GetValue(Resources.rccDirKeyword) is string rccDir)  | 
|                         DefaultRccDir = rccDir;  | 
|                     if (key.GetValue(Resources.uicDirKeyword) is string uicDir)  | 
|                         DefaultUicDir = uicDir;  | 
|                     if (key.GetValue(VALUENAME_LegacyPreBuild) is int preBuild)  | 
|                         PreBuildSetup = (preBuild != 0);  | 
|                 }  | 
|             } catch (Exception exception) {  | 
|                 Messages.Print(  | 
|                     exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace);  | 
|             }  | 
|         }  | 
|   | 
|         public override void SaveSettingsToStorage()  | 
|         {  | 
|             try {  | 
|                 using (var key = Registry.CurrentUser  | 
|                     .CreateSubKey(@"SOFTWARE\" + Resources.registryPackagePath)) {  | 
|                     if (key == null)  | 
|                         return;  | 
|                     key.SetValue(Resources.askBeforeCheckoutFileKeyword, CheckoutPrompt ? 1 : 0);  | 
|                     key.SetValue(Resources.disableCheckoutFilesKeyword, Checkout ? 0 : 1);  | 
|                     key.SetValue(Resources.lreleaseOptionsKeyword, DefaultLReleaseOptions);  | 
|                     key.SetValue(Resources.lupdateOptionsKeyword, DefaultLUpdateOptions);  | 
|                     key.SetValue(Resources.lupdateKeyword, EnableLUpdateOnBuild ? 1 : 0);  | 
|                     key.SetValue(Resources.mocDirKeyword, DefaultMocDir);  | 
|                     key.SetValue(Resources.mocOptionsKeyword, AdditionalMocOptions);  | 
|                     key.SetValue(Resources.disableAutoMocStepsUpdateKeyword, AutoMoc ? 0 : 1);  | 
|                     key.SetValue(Resources.rccDirKeyword, DefaultRccDir);  | 
|                     key.SetValue(Resources.uicDirKeyword, DefaultUicDir);  | 
|                     key.SetValue(VALUENAME_LegacyPreBuild, PreBuildSetup ? 1 : 0);  | 
|                 }  | 
|             } catch (Exception exception) {  | 
|                 Messages.Print(  | 
|                     exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace);  | 
|             }  | 
|         }  | 
|     }  | 
| }  |