public Main(DirectoryInfo _dir) { while (!DirIsProjectRoot(_dir)) { _dir = _dir.Parent; if (_dir == null) { // TODO // Create an exception class to throw here. // It'll get caught somewhere and result in a special interaction with the user // to determine which directory to create the project file in. throw new InvalidOperationException(); } } Root = _dir; Ini.IniParser.Parse(Path.Combine(Root.FullName, ConfigFileName), ref config); var m = new FileMatcher(); m.ExcludeExecutableFiles = config[""].GetBoolWithDefault("exclude-exec", true); if (config.ContainsKey("include")) { foreach (var i in config["include"].Keys) { m.IncludeGlob(i); } } if (config.ContainsKey("exclude")) { foreach (var e in config["exclude"].Keys) { m.ExcludeGlob(e); } } files = m.MatchAll(Root).Select(f => new File(this, f)).ToList(); Files = new ReadOnlyCollection<File>(files); buffers = new BindList<Buffer>(); buffers.Add(new Buffer()); Buffers = new ReadOnlyCollection<Buffer>(buffers); }