/****************************************************************************
|
**
|
** Copyright (C) 2016 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 EnvDTE;
|
using QtVsTools.Core;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Windows.Forms;
|
using System.IO;
|
|
namespace QtVsTools
|
{
|
public partial class FormProjectQtSettings : Form
|
{
|
private Project project;
|
private QtProject qtProject;
|
private ProjectQtSettings qtSettings;
|
|
private struct ModuleMapItem
|
{
|
public CheckBox checkbox;
|
public int moduleId;
|
public bool initialValue;
|
|
public ModuleMapItem(CheckBox cb, int mid)
|
{
|
checkbox = cb;
|
moduleId = mid;
|
initialValue = false;
|
}
|
}
|
|
private List<ModuleMapItem> moduleMap = new List<ModuleMapItem>();
|
|
public FormProjectQtSettings()
|
{
|
InitializeComponent();
|
okButton.Text = SR.GetString("OK");
|
cancelButton.Text = SR.GetString("Cancel");
|
tabControl1.TabPages[0].Text = SR.GetString("ActionDialog_Properties");
|
tabControl1.TabPages[1].Text = SR.GetString("QtModules");
|
|
var modules = QtModules.Instance.GetAvailableModules()
|
.Where(x => x.Selectable)
|
.OrderBy(x => x.Name);
|
foreach (var module in modules) {
|
var checkBox = new CheckBox();
|
checkBox.Location = new System.Drawing.Point(844, 152);
|
checkBox.Margin = new Padding(3, 2, 6, 2);
|
checkBox.Name = module.LibraryPrefix;
|
checkBox.Size = new System.Drawing.Size(256, 46);
|
checkBox.UseVisualStyleBackColor = true;
|
flowLayoutPanel1.Controls.Add(checkBox);
|
checkBox.Text = module.Name;
|
AddMapping(checkBox, module.Id);
|
}
|
|
KeyPress += FormProjectQtSettings_KeyPress;
|
|
Shown += FormProjectQtSettings_Shown;
|
}
|
|
private void FormProjectQtSettings_Shown(object sender, EventArgs e)
|
{
|
Text = SR.GetString("ProjectQtSettingsButtonText");
|
}
|
|
private void AddMapping(CheckBox checkbox, int moduleId)
|
{
|
moduleMap.Add(new ModuleMapItem(checkbox, moduleId));
|
}
|
|
public void SetProject(Project pro)
|
{
|
project = pro;
|
qtProject = QtProject.Create(project);
|
InitModules();
|
qtSettings = new ProjectQtSettings(project);
|
OptionsPropertyGrid.SelectedObject = qtSettings;
|
}
|
|
private void FormProjectQtSettings_KeyPress(object sender, KeyPressEventArgs e)
|
{
|
if (e.KeyChar == 27) {
|
DialogResult = DialogResult.Cancel;
|
Close();
|
}
|
}
|
|
private void okButton_Click(object sender, EventArgs e)
|
{
|
// Disable the buttons since some operations are quite expensive (e.g. changing
|
// the Qt version) and take some to finish. Keeping the buttons enables allows to hit
|
// the buttons several times resulting in successive executions of these operations.
|
okButton.Enabled = false;
|
cancelButton.Enabled = false;
|
|
qtSettings.SaveSettings();
|
saveModules();
|
okButton.DialogResult = DialogResult.OK;
|
Close();
|
}
|
|
private void InitModules()
|
{
|
var versionManager = QtVersionManager.The();
|
var qtVersion = qtProject.GetQtVersion();
|
var install_path = versionManager.GetInstallPath(qtVersion) ?? string.Empty;
|
|
for (var i = 0; i < moduleMap.Count; ++i) {
|
var item = moduleMap[i];
|
item.initialValue = qtProject.HasModule(item.moduleId);
|
item.checkbox.Checked = item.initialValue;
|
moduleMap[i] = item;
|
|
// Disable if module not installed
|
var info = QtModules.Instance.Module(item.moduleId);
|
var versionInfo = versionManager.GetVersionInfo(qtVersion);
|
if (info != null && versionInfo != null) {
|
var libraryPrefix = info.LibraryPrefix;
|
if (libraryPrefix.StartsWith("Qt", StringComparison.Ordinal))
|
libraryPrefix = "Qt5" + libraryPrefix.Substring(2);
|
var full_path = Path.Combine(install_path, "lib",
|
string.Format("{0}{1}.lib", libraryPrefix, versionInfo.LibInfix()));
|
var fi = new System.IO.FileInfo(full_path);
|
item.checkbox.Enabled = fi.Exists;
|
if (fi.Exists == false) {
|
// Don't disable item if qtVersion not available
|
if (qtVersion != null)
|
item.checkbox.Checked = false;
|
}
|
} else {
|
item.checkbox.Checked = false;
|
}
|
}
|
}
|
|
private void saveModules()
|
{
|
qtProject = QtProject.Create(project);
|
for (var i = 0; i < moduleMap.Count; ++i) {
|
var item = moduleMap[i];
|
var isModuleChecked = item.checkbox.Checked;
|
if (isModuleChecked != item.initialValue) {
|
if (isModuleChecked)
|
qtProject.AddModule(item.moduleId);
|
else
|
qtProject.RemoveModule(item.moduleId);
|
}
|
}
|
}
|
|
}
|
}
|