Cosmos/source/Cosmos.Build.Windows/BuildUI.cs
kudzu_cp 2076e5fead
2008-09-19 23:27:38 +00:00

118 lines
5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows;
using Microsoft.Win32;
using Indy.IL2CPU;
namespace Cosmos.Build.Windows {
public class BuildUI {
[DllImport("user32.dll")]
protected static extern int ShowWindow(int Handle, int showState);
[DllImport("kernel32.dll")]
protected static extern int GetConsoleWindow();
protected Builder mBuilder = new Builder();
protected int mConsoleWindow;
protected MainWindow mMainWindow;
protected OptionsUC mOptionsUC;
protected void OptionsProceed() {
// Call IL2CPU
if (mOptionsUC.chbxCompileIL.IsChecked.Value) {
//TODO: Eventually eliminate the console window completely
if (mOptionsUC.chbxShowConsoleWindow.IsChecked.Value) {
ShowWindow(mConsoleWindow, 1);
}
var xBuildUC = new BuildUC();
mMainWindow.Content = xBuildUC;
if (xBuildUC.Display(mBuilder, mOptionsUC.DebugMode, mOptionsUC.ComPort) == false) {
return;
}
}
mMainWindow.Close();
DebugWindow xDebugWindow = null;
// Debug Window is only displayed if Qemu + Debug checked
// or if other VM + Debugport selected
if (!mOptionsUC.rdioDebugModeNone.IsChecked.Value) {
xDebugWindow = new DebugWindow();
if (mOptionsUC.DebugMode == DebugModeEnum.Source) {
var xLabelByAddressMapping = ObjDump.GetLabelByAddressMapping(
mBuilder.BuildPath + "output.bin"
, mBuilder.ToolsPath + @"cygwin\objdump.exe");
var xSourceMappings = SourceInfo.GetSourceInfo(xLabelByAddressMapping
, mBuilder.BuildPath + "Tools/asm/debug.cxdb");
DebugConnector xDebugConnector;
if (mOptionsUC.rdioQEMU.IsChecked.Value) {
xDebugConnector = new DebugConnectorQEMU();
} else if (mOptionsUC.rdioVMWare.IsChecked.Value) {
xDebugConnector = new DebugConnectorVMWare();
} else {
throw new Exception("TODO: Make a connector for raw serial");
}
xDebugWindow.SetSourceInfoMap(xSourceMappings, xDebugConnector);
} else {
throw new Exception("Debug mode not supported: " + mOptionsUC.DebugMode);
}
}
// Launch emulators or other final actions
if (mOptionsUC.rdioQEMU.IsChecked.Value) {
// Uncomment if problems with QEMU to see output
// TODO: Capture and send to debug window
//ShowWindow(xConsoleWindow, 1);
mBuilder.MakeQEMU(mOptionsUC.chbxQEMUUseHD.IsChecked.Value,
mOptionsUC.chbxQEMUUseGDB.IsChecked.Value,
mOptionsUC.DebugMode != DebugModeEnum.None,
mOptionsUC.chckQEMUUseNetworkTAP.IsChecked.Value,
mOptionsUC.cmboNetworkCards.SelectedValue,
mOptionsUC.cmboAudioCards.SelectedValue);
} else if (mOptionsUC.rdioVMWare.IsChecked.Value) {
mBuilder.MakeVMWare(mOptionsUC.rdVMWareServer.IsChecked.Value);
} else if (mOptionsUC.rdioVPC.IsChecked.Value) {
mBuilder.MakeVPC();
} else if (mOptionsUC.rdioISO.IsChecked.Value) {
mBuilder.MakeISO();
} else if (mOptionsUC.rdioPXE.IsChecked.Value) {
mBuilder.MakePXE();
} else if (mOptionsUC.rdioUSB.IsChecked.Value) {
mBuilder.MakeUSB(mOptionsUC.cmboUSBDevice.Text[0]);
}
if (xDebugWindow != null) {
xDebugWindow.ShowDialog();
}
}
protected void OptionsStop() {
mMainWindow.Close();
}
protected void Execute() {
// Hide the console window
mConsoleWindow = GetConsoleWindow();
ShowWindow(mConsoleWindow, 0);
// Create here, after we hide console Window so it gets hidden quickly
mMainWindow = new MainWindow();
mOptionsUC = new OptionsUC(mBuilder.BuildPath);
mOptionsUC.Proceed = OptionsProceed;
mOptionsUC.Stop = OptionsStop;
mMainWindow.Content = mOptionsUC;
mMainWindow.ShowDialog();
}
public static void Run() {
var xBuildUI = new BuildUI();
xBuildUI.Execute();
}
}
}