mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-20 12:58:39 +00:00
153 lines
6.2 KiB
C#
153 lines
6.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.IO;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Runtime.InteropServices;
|
|
using Cosmos.Build.Common;
|
|
using Microsoft.VisualStudio.Project;
|
|
using Microsoft.VisualStudio;
|
|
|
|
namespace Cosmos.VS.Package {
|
|
[Guid(Guids.BuildPage)]
|
|
public partial class BuildPage : ConfigurationBase{
|
|
public static TargetHost CurrentBuildTarget = TargetHost.VMWare;
|
|
public static event EventHandler BuildTargetChanged;
|
|
|
|
protected static void OnBuildTargetChanged(Object sender, EventArgs e) {
|
|
if (BuildPage.BuildTargetChanged != null) {
|
|
BuildPage.BuildTargetChanged(sender, e);
|
|
}
|
|
}
|
|
|
|
public BuildPage() {
|
|
InitializeComponent();
|
|
|
|
textOutputPath.TextChanged += delegate(Object sender, EventArgs e) {
|
|
string value = textOutputPath.Text;
|
|
if (!string.Equals(value, mProps.OutputPath, StringComparison.InvariantCultureIgnoreCase)) {
|
|
mProps.OutputPath = textOutputPath.Text;
|
|
IsDirty = true;
|
|
}
|
|
};
|
|
comboFramework.Items.AddRange(EnumValue.GetEnumValues(typeof(Framework), true));
|
|
comboFramework.SelectedIndexChanged += delegate(Object sender, EventArgs e) {
|
|
var value = (Framework)((EnumValue)comboFramework.SelectedItem).Value;
|
|
if (value != mProps.Framework) {
|
|
mProps.Framework = value;
|
|
IsDirty = true;
|
|
}
|
|
};
|
|
|
|
checkUseInternalAssembler.CheckedChanged += delegate(Object sender, EventArgs e) {
|
|
bool value = checkUseInternalAssembler.Checked;
|
|
if (value != mProps.UseInternalAssembler) {
|
|
mProps.UseInternalAssembler = value;
|
|
IsDirty = true;
|
|
}
|
|
};
|
|
|
|
|
|
comboTarget.Items.AddRange(EnumValue.GetEnumValues(typeof(TargetHost), true));
|
|
comboTarget.SelectedIndexChanged += delegate(Object sender, EventArgs e) {
|
|
var value = (TargetHost)((EnumValue)comboTarget.SelectedItem).Value;
|
|
if (value != mProps.Target) {
|
|
mProps.Target = value;
|
|
IsDirty = true;
|
|
|
|
comboFlavor.Visible = value == TargetHost.VMWare;
|
|
|
|
CurrentBuildTarget = value;
|
|
OnBuildTargetChanged(this, EventArgs.Empty);
|
|
}
|
|
};
|
|
|
|
comboFlavor.Items.AddRange(EnumValue.GetEnumValues(typeof(VMwareFlavor), true));
|
|
comboFlavor.SelectedIndexChanged += delegate(Object sender, EventArgs e) {
|
|
var x = (VMwareFlavor)((EnumValue)comboFlavor.SelectedItem).Value;
|
|
if (x != mProps.VMWareFlavor) {
|
|
mProps.VMWareFlavor = x;
|
|
IsDirty = true;
|
|
}
|
|
};
|
|
}
|
|
|
|
protected BuildProperties mProps = new BuildProperties();
|
|
public override PropertiesBase Properties {
|
|
get { return mProps; }
|
|
}
|
|
|
|
protected override void FillProperties() {
|
|
base.FillProperties();
|
|
|
|
mProps.Reset();
|
|
|
|
//TODO: Why are we copying these one by one instead of automatic?
|
|
mProps.SetProperty("OutputPath", GetConfigProperty("OutputPath"));
|
|
textOutputPath.Text = mProps.OutputPath;
|
|
|
|
mProps.SetProperty("BuildTarget", GetConfigProperty("BuildTarget"));
|
|
comboTarget.SelectedItem = EnumValue.Find(comboTarget.Items, mProps.Target);
|
|
// We need to manually trigger it once, because the indexchanged event compares
|
|
// it against the source, and they will of course be the same.
|
|
CurrentBuildTarget = (TargetHost)((EnumValue)comboTarget.SelectedItem).Value;
|
|
OnBuildTargetChanged(this, EventArgs.Empty);
|
|
|
|
mProps.SetProperty("Framework", GetConfigProperty("Framework"));
|
|
comboFramework.SelectedItem = EnumValue.Find(comboFramework.Items, mProps.Framework);
|
|
|
|
mProps.SetProperty("UseInternalAssembler", GetConfigProperty("UseInternalAssembler"));
|
|
checkUseInternalAssembler.Checked = mProps.UseInternalAssembler;
|
|
|
|
mProps.SetProperty("VMWareFlavor", GetConfigProperty("VMWareFlavor"));
|
|
comboFlavor.SelectedItem = EnumValue.Find(comboFlavor.Items, mProps.VMWareFlavor);
|
|
}
|
|
|
|
private void OutputBrowse_Click(object sender, EventArgs e) {
|
|
string folderPath = String.Empty;
|
|
var dialog = new FolderBrowserDialog();
|
|
dialog.ShowNewFolderButton = true;
|
|
|
|
folderPath = textOutputPath.Text;
|
|
if ((String.IsNullOrEmpty(folderPath) == false) && (folderPath.IndexOfAny(System.IO.Path.GetInvalidPathChars()) == -1)) {
|
|
if (System.IO.Path.IsPathRooted(folderPath) == false) {
|
|
folderPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Project.FullName), folderPath);
|
|
}
|
|
|
|
while ((System.IO.Directory.Exists(folderPath) == false) && (String.IsNullOrEmpty(folderPath) == false)) {
|
|
int index = -1;
|
|
index = folderPath.IndexOfAny(new Char[] { System.IO.Path.PathSeparator, System.IO.Path.AltDirectorySeparatorChar });
|
|
if (index > -1) {
|
|
folderPath = folderPath.Substring(0, index - 1);
|
|
} else {
|
|
folderPath = String.Empty;
|
|
}
|
|
}
|
|
|
|
if (String.IsNullOrEmpty(folderPath) == true) {
|
|
folderPath = System.IO.Path.GetDirectoryName(Project.FullName);
|
|
}
|
|
} else {
|
|
folderPath = System.IO.Path.GetDirectoryName(Project.FullName);
|
|
}
|
|
|
|
dialog.SelectedPath = folderPath;
|
|
dialog.Description = "Select build output path";
|
|
|
|
if (dialog.ShowDialog() == DialogResult.OK) {
|
|
textOutputPath.Text = dialog.SelectedPath;
|
|
}
|
|
}
|
|
|
|
private void comboTarget_SelectedIndexChanged(object sender, EventArgs e) {
|
|
var xEnumValue = (EnumValue)comboTarget.SelectedItem;
|
|
var xValue = (TargetHost)xEnumValue.Value;
|
|
if (xValue != TargetHost.VMWare && xValue != TargetHost.ISO) {
|
|
MessageBox.Show("This type is temporarily unsupported.");
|
|
}
|
|
}
|
|
}
|
|
}
|