/** ***************************************************************************** */
  PybaseProject(PybaseMain pm, String name, File base) {
    pybase_main = pm;
    project_manager = pm.getProjectManager();
    base_directory = base.getAbsoluteFile();
    try {
      base_directory = base_directory.getCanonicalFile();
    } catch (IOException e) {
    }
    if (name == null) name = base.getName();
    project_name = name;
    project_paths = new ArrayList<IPathSpec>();
    project_files = new ArrayList<IFileSpec>();
    pybase_prefs = new PybasePreferences(pm.getSystemPreferences());
    all_files = new HashSet<IFileData>();
    parse_data = new HashMap<IFileData, ISemanticData>();

    File f = new File(base_directory, ".pybase");
    if (!f.exists()) f.mkdir();

    File f1 = new File(base_directory, ".pyproject");
    Element xml = IvyXml.loadXmlFromFile(f1);
    if (xml == null) {
      setupDefaults();
    } else {
      String bfile = IvyXml.getTextElement(xml, "EXE");
      File bf = (bfile == null ? null : new File(bfile));
      python_interpreter = project_manager.findInterpreter(bf);
      for (Element pe : IvyXml.children(xml, "PATH")) {
        IPathSpec ps = project_manager.createPathSpec(pe);
        project_paths.add(ps);
      }
      for (Element fe : IvyXml.children(xml, "FILE")) {
        IFileSpec fs = project_manager.createFileSpec(fe);
        project_files.add(fs);
      }
      pybase_prefs.loadXml(xml);
    }
    project_nature = new PybaseNature(pm, this);
    is_open = false;
    saveProject();
  }