public override void ImportFile(string filename)
{
if (!Path.IsPathRooted(filename))
{
// only try to search for the file if we're not passed an absolute location.
var currentDir = Path.GetDirectoryName(FullPath);
if (filename.IndexOfAny(new[] { '/', '\\' }) > -1)
{
// does have a slash, is meant to be a relative path from the parent sheet.
var fullPath = Path.Combine(currentDir, filename);
if (!File.Exists(fullPath))
{
throw new FileNotFoundException("Unable to locate imported property sheet '{0}'".format(filename), fullPath);
}
filename = fullPath;
}
else
{
// just a filename. Scan up the tree and into known locations for it.
var paths = filename.GetAllCustomFilePaths(currentDir);
var chkPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), filename);
if (File.Exists(chkPath))
{
paths = paths.ConcatSingleItem(chkPath);
}
chkPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "etc", filename);
if (File.Exists(chkPath))
{
paths = paths.ConcatSingleItem(chkPath);
}
foreach (var i in paths)
{
ImportFile(i);
}
return;
}
}
if (Root._imports.Any(each => each.FullPath.Equals(filename, StringComparison.CurrentCulture)))
{
return;
}
// filename is now the absolute path.
var importedSheet = new PropertySheet(this);
importedSheet.ParseFile(filename);
_imports.Add(importedSheet);
AddChildRoutes(importedSheet.Routes);
_view.InitializeAtRootLevel(importedSheet);
}