Cosmos/source/Cosmos.Debug.GDB/Settings.cs

110 lines
No EOL
3.9 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Cosmos.Debug.GDB {
public class Settings {
static protected string mFilenameOfBreakPointXml = "";
static public string Filename {
get { return mFilenameOfBreakPointXml; }
}
static protected bool mAutoConnect = false;
static public bool AutoConnect {
get { return mAutoConnect; }
set { mAutoConnect = value; }
}
static protected string mOutputPath;
static public string OutputPath {
get { return mOutputPath; }
}
static protected string mObjFile;
static public string ObjFile {
get { return mObjFile; }
}
static protected string mAsmFile;
static public string AsmFile {
get { return mAsmFile; }
}
static public SettingsDS DS = new SettingsDS();
static public void Save() {
Windows.SavePositions();
Windows.mBreakpointsForm.SaveSettings();
// Its often checked into TFS, so if its readonly, dont save it.
if (File.Exists(Filename) && (File.GetAttributes(Filename) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) {
MessageBox.Show("File is read only. Cannot save.");
} else {
DS.WriteXml(Filename, System.Data.XmlWriteMode.IgnoreSchema);
}
}
static public bool Load(string aFilenameOfBreakPointXml) {
mFilenameOfBreakPointXml = aFilenameOfBreakPointXml;
try {
//TODO: Change this and other general settings to read from the General datatable
mOutputPath = Path.Combine(Path.GetDirectoryName(Filename), @"bin\debug\");
mObjFile = Path.GetFileNameWithoutExtension(Filename) + ".obj";
mAsmFile = Path.GetFileNameWithoutExtension(Filename) + ".asm";
if (File.Exists(Filename))
DS.ReadXml(Filename, System.Data.XmlReadMode.IgnoreSchema);
return true;
}
catch (Exception e) {
mOutputPath = null;
MessageBox.Show(string.Format(
"Exception on loading of settings file \"{0}\" :\n{1}\n\nStacktrace:\n{2}",
Filename, e.Message, e.StackTrace),
"Breakpoint Settings", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
return false;
}
static public bool LoadOnFly(string aFilenameOfBreakPointXml)
{
mFilenameOfBreakPointXml = aFilenameOfBreakPointXml;
try
{
//TODO: Change this and other general settings to read from the General datatable
mOutputPath = Path.GetDirectoryName(Filename);
mObjFile = Path.GetFileNameWithoutExtension(Filename) + ".obj";
mAsmFile = Path.GetFileNameWithoutExtension(Filename) + ".asm";
// for save function needed
if (mOutputPath.ToLower().EndsWith("\\bin\\debug"))
{
// create path for cgdb like VS it does
int len = "\\bin\\debug".Length;
mFilenameOfBreakPointXml = Path.Combine(mOutputPath.Substring(0, mOutputPath.Length - len), Path.GetFileNameWithoutExtension(Filename) + ".cgdb");
}
else
mFilenameOfBreakPointXml = Path.Combine(mOutputPath, Path.GetFileNameWithoutExtension(Filename) + ".cgdb");
if (false == File.Exists(Path.Combine(mOutputPath, mObjFile))
|| false == File.Exists(Path.Combine(mOutputPath, mAsmFile))
|| false == File.Exists(Path.Combine(mOutputPath, Path.GetFileNameWithoutExtension(Filename) + ".mdf")))
{
mOutputPath = null;
return false;
}
return true;
}
catch (Exception)
{
mOutputPath = null;
}
return false;
}
static public void InitWindows() {
Windows.RestorePositions();
Windows.mBreakpointsForm.LoadSession();
}
}
}