anchor.diff:      ul.children.add(createMenuItem(actionManager.getAction('help-about')));
     }
   
  +  //
  +  // - End parts of ctor.
  +  //
  +  void newFile() => notImplemented('Spark.newFile()');
  +
  +  void openFile() {
  +    chrome.ChooseEntryOptions options = new chrome.ChooseEntryOptions(
  +        type: chrome.ChooseEntryType.OPEN_WRITABLE_FILE);
  +    chrome.fileSystem.chooseEntry(options).then((chrome.ChooseEntryResult result) {
  +      chrome.ChromeFileEntry entry = result.entry;
  +
  +      if (entry != null) {
  +        workspace.link(entry).then((file) {
  +          editorArea.selectFile(file, forceOpen: true, switchesTab: true);
  +          workspace.save();
  +        });
  +      }
  +    }).catchError((e) => null);
  +  }
  +
  +  void openProject() {
  +    chrome.ChooseEntryOptions options = new chrome.ChooseEntryOptions(
  +        type: chrome.ChooseEntryType.OPEN_DIRECTORY);
  +    chrome.fileSystem.chooseEntry(options).then((chrome.ChooseEntryResult result) {
  +      chrome.ChromeFileEntry entry = result.entry;
  +
  +      if (entry != null) {
  +        workspace.link(entry).then((file) {
  +          _filesController.selectLastFile();
  +          workspace.save();
  +        });
  +      }
  +    }).catchError((e) => null);
  +  }
  +
  +  void deleteFile() {
  +    // TODO: handle multiple selection
  +    var sel = _filesController.getSelection();
  +    if (sel.isNotEmpty) {
  +      sel.first.delete();
  +    }
  +  }
  +
  +  void closeFile() {
  +    List futures = [];
  +    var sel = _filesController.getSelection();
  +    if (sel.isNotEmpty) {
  +      sel.forEach((ws.Resource resource) {
  +        if (resource.isTopLevel) {
  +          _closeOpenEditor(resource);
  +          futures.add(resource.close());
  +        }
  +      });
  +    }
  +    Future.wait(futures).then((_) => workspace.save());
  +  }
  +
  +  void _closeOpenEditor(ws.Resource resource) {
  +    if (resource is ws.File &&  editorManager.isFileOpened(resource)) {
  +      editorManager.close(resource);
  +    }
  +  }
  +
     void showStatus(String text, {bool error: false}) {
       Element element = querySelector("#status");
       element.text = text;
  
positive.code:     initEditorThemes();
      initFilesController();
  
      // Init the bootjack library (a wrapper around bootstrap).
      bootjack.Bootjack.useDefault();
  
      createActions();
      initToolbar();
  
negative.code:     });
    }
  
    void initEditorThemes() {
      syncPrefs.getValue('aceTheme').then((String theme) {
        if (theme != null && AceEditor.THEMES.contains(theme)) {
          editor.theme = theme;
        }
      });
    }
  
    void initFilesController() {
      _filesController = new FilesController(workspace, this);
    }
  
    void initLookAndFeel() {
      // Init the Bootjack library (a wrapper around Bootstrap).
      bootjack.Bootjack.useDefault();
    }
  
    void initSplitView() {
      _splitView = new SplitView(querySelector('#splitview'));
      _splitView.onResized.listen((_) {
        editor.resize();
        syncPrefs.setValue('splitViewPosition', _splitView.position.toString());
      });
      syncPrefs.getValue('splitViewPosition').then((String position) {
        if (position != null) {
          int value = int.parse(position, onError: (_) => 0);
          if (value != 0) {
            _splitView.position = value;
          }
        }
      });
    }
  
    void createActions() {
  