Cosmos/source/Cosmos.Build.Windows/BuildOptionsWindow.xaml.cs
2008-03-22 01:24:47 +00:00

206 lines
8.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace Cosmos.Build.Windows {
public partial class BuildOptionsWindow : Window {
protected Block mOptionsBlockPrefix;
protected Builder mBuilder = new Builder();
public static void Display() {
var xWindow = new BuildOptionsWindow();
xWindow.ShowDialog();
}
public BuildOptionsWindow() {
InitializeComponent();
Loaded += delegate(object sender, RoutedEventArgs e) {
this.Activate();
};
butnBuild.Click += new RoutedEventHandler(butnBuild_Click);
butnCancel.Click += new RoutedEventHandler(butnCancel_Click);
rdioQEMU.Checked += new RoutedEventHandler(rdioTarget_Checked);
rdioQEMU.Unchecked += new RoutedEventHandler(rdioTarget_Unchecked);
rdioVMWare.Checked += new RoutedEventHandler(rdioVMWare_Checked);
rdioVMWare.Unchecked += new RoutedEventHandler(rdioVMWare_Unchecked);
rdioVPC.Checked += new RoutedEventHandler(rdioVPC_Checked);
rdioVPC.Unchecked += new RoutedEventHandler(rdioVPC_Unchecked);
rdioISO.Checked += new RoutedEventHandler(rdioISO_Checked);
rdioISO.Unchecked += new RoutedEventHandler(rdioISO_Unchecked);
rdioPXE.Checked += new RoutedEventHandler(rdioPXE_Checked);
rdioPXE.Unchecked += new RoutedEventHandler(rdioPXE_Unchecked);
rdioUSB.Checked += new RoutedEventHandler(rdioUSB_Checked);
rdioUSB.Unchecked += new RoutedEventHandler(rdioUSB_Unchecked);
spanBuildPath.Inlines.Add(mBuilder.BuildPath);
spanISOPath.Inlines.Add(mBuilder.BuildPath + "Cosmos.iso");
mOptionsBlockPrefix = paraQEMUOptions.PreviousBlock;
//RootDoc.Blocks.Remove(paraQEMUOptions);
RootDoc.Blocks.Remove(paraVMWareOptions);
RootDoc.Blocks.Remove(paraVPCOptions);
RootDoc.Blocks.Remove(paraISOOptions);
RootDoc.Blocks.Remove(paraPXEOptions);
RootDoc.Blocks.Remove(paraUSBOptions);
var xDrives = System.IO.Directory.GetLogicalDrives();
foreach (string xDrive in xDrives) {
var xType = new System.IO.DriveInfo(xDrive);
if (xType.IsReady) {
if ((xType.DriveType == System.IO.DriveType.Removable) && xType.DriveFormat.StartsWith("FAT")) {
cmboUSBDevice.Items.Add(xDrive);
}
}
}
LoadSettingsFromRegistry();
}
void rdioUSB_Checked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.InsertAfter(mOptionsBlockPrefix, paraUSBOptions);
}
void rdioUSB_Unchecked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.Remove(paraUSBOptions);
}
void rdioISO_Checked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.InsertAfter(mOptionsBlockPrefix, paraISOOptions);
}
void rdioISO_Unchecked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.Remove(paraISOOptions);
}
void rdioVPC_Checked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.InsertAfter(mOptionsBlockPrefix, paraVPCOptions);
}
void rdioVPC_Unchecked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.Remove(paraVPCOptions);
}
void rdioVMWare_Checked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.InsertAfter(mOptionsBlockPrefix, paraVMWareOptions);
}
void rdioVMWare_Unchecked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.Remove(paraVMWareOptions);
}
void rdioPXE_Checked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.InsertAfter(mOptionsBlockPrefix, paraPXEOptions);
}
void rdioPXE_Unchecked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.Remove(paraPXEOptions);
}
void rdioTarget_Checked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.InsertAfter(mOptionsBlockPrefix, paraQEMUOptions);
}
void rdioTarget_Unchecked(object sender, RoutedEventArgs e) {
RootDoc.Blocks.Remove(paraQEMUOptions);
}
void butnBuild_Click(object sender, RoutedEventArgs e) {
SaveSettingsToRegistry();
if (!buildCheckBox.IsChecked.Value) {
Console.WriteLine("Compiling...");
mBuilder.Compile();
}
if (rdioQEMU.IsChecked.Value) {
mBuilder.MakeQEMU(chckQEMUUseHD.IsChecked.Value, chckQEMUUseGDB.IsChecked.Value);
} else if (rdioVMWare.IsChecked.Value) {
mBuilder.MakeVMWare();
} else if (rdioVPC.IsChecked.Value) {
mBuilder.MakeVPC();
} else if (rdioISO.IsChecked.Value) {
mBuilder.MakeISO();
} else if (rdioPXE.IsChecked.Value) {
mBuilder.MakePXE();
} else if (rdioUSB.IsChecked.Value) {
mBuilder.MakeUSB(cmboUSBDevice.Text[0]);
}
Console.WriteLine("Press enter to continue.");
Console.ReadLine();
}
void butnCancel_Click(object sender, RoutedEventArgs e) {
DialogResult = false;
}
void SaveSettingsToRegistry() {
string xValue = "QEMU";
if (rdioVMWare.IsChecked.Value) {
xValue = "VMWare";
} else if (rdioVPC.IsChecked.Value) {
xValue = "VPC";
} else if (rdioISO.IsChecked.Value) {
xValue = "ISO";
} else if (rdioPXE.IsChecked.Value) {
xValue = "PXE";
} else if (rdioUSB.IsChecked.Value) {
xValue = "USB";
}
BuildRegistry.Write("Build Type", xValue);
BuildRegistry.Write("Use GDB", chckQEMUUseGDB.IsChecked.Value.ToString());
BuildRegistry.Write("Create HD Image", chckQEMUUseHD.IsChecked.Value.ToString());
BuildRegistry.Write("Skip IL", buildCheckBox.IsChecked.Value.ToString());
if (cmboUSBDevice.SelectedItem != null) {
BuildRegistry.Write("USB Device", cmboUSBDevice.Text);
}
}
void LoadSettingsFromRegistry() {
string xBuildType = BuildRegistry.Read("Build Type");
switch (xBuildType) {
case "QEMU":
rdioQEMU.IsChecked = true;
break;
case "VMWare":
rdioVMWare.IsChecked = true;
break;
case "VPC":
rdioVPC.IsChecked = true;
break;
case "ISO":
rdioISO.IsChecked = true;
break;
case "PXE":
rdioPXE.IsChecked = true;
break;
case "USB":
rdioUSB.IsChecked = true;
break;
}
bool useGDB;
bool.TryParse(BuildRegistry.Read("Use GDB"), out useGDB);
chckQEMUUseGDB.IsChecked = useGDB;
bool createHDimg;
bool.TryParse(BuildRegistry.Read("Create HD Image"), out createHDimg);
chckQEMUUseHD.IsChecked = createHDimg;
bool skipIL;
bool.TryParse(BuildRegistry.Read("Skip IL"), out skipIL);
buildCheckBox.IsChecked = skipIL;
string xUSBDevice = BuildRegistry.Read("USB Device");
cmboUSBDevice.SelectedIndex = cmboUSBDevice.Items.IndexOf(xUSBDevice);
}
}
}