private void updateCellType()

in src/org/jetbrains/plugins/ipnb/editor/IpnbFileEditor.java [171:253]


  private void updateCellType(@NotNull final String selectedItem, @NotNull final IpnbEditablePanel selectedCell) {
    selectedCell.updateCellSource();
    if (selectedCell instanceof IpnbHeadingPanel) {
      final IpnbHeadingCell cell = ((IpnbHeadingPanel)selectedCell).getCell();
      if (selectedItem.startsWith(headingCellType)) {
        final char c = selectedItem.charAt(selectedItem.length() - 1);
        final int level = Character.getNumericValue(c);
        if (level != cell.getLevel()) {
          cell.setLevel(level);
          selectedCell.updateCellView();
        }
      }
      else if (selectedItem.equals(markdownCellType)) {
        final List<IpnbCell> cells = myIpnbFilePanel.getIpnbFile().getCells();
        final int index = cells.indexOf(((IpnbHeadingPanel)selectedCell).getCell());
        final IpnbMarkdownCell markdownCell = new IpnbMarkdownCell(cell.getSource(), cell.getMetadata());
        if (index >= 0) {
          cells.set(index, markdownCell);
        }
        myIpnbFilePanel.replaceComponent(selectedCell, markdownCell);
      }
      else if (selectedItem.equals(codeCellType)) {
        final List<IpnbCell> cells = myIpnbFilePanel.getIpnbFile().getCells();
        final int index = cells.indexOf(((IpnbHeadingPanel)selectedCell).getCell());
        final IpnbCodeCell codeCell = new IpnbCodeCell("python", cell.getSource(), null, Lists.newArrayList(),
                                                       cell.getMetadata());
        if (index >= 0) {
          cells.set(index, codeCell);
        }

        myIpnbFilePanel.replaceComponent(selectedCell, codeCell);
      }
    }
    else if (selectedCell instanceof IpnbMarkdownPanel) {
      final IpnbMarkdownCell cell = ((IpnbMarkdownPanel)selectedCell).getCell();
      if (selectedItem.startsWith(headingCellType)) {
        final char c = selectedItem.charAt(selectedItem.length() - 1);
        final int level = Character.getNumericValue(c);
        final List<IpnbCell> cells = myIpnbFilePanel.getIpnbFile().getCells();
        final int index = cells.indexOf(((IpnbMarkdownPanel)selectedCell).getCell());
        final IpnbHeadingCell headingCell = new IpnbHeadingCell(cell.getSource(), level, cell.getMetadata());
        if (index >= 0) {
          cells.set(index, headingCell);
        }

        myIpnbFilePanel.replaceComponent(selectedCell, headingCell);
      }
      else if (selectedItem.equals(codeCellType)) {
        final List<IpnbCell> cells = myIpnbFilePanel.getIpnbFile().getCells();
        final int index = cells.indexOf(((IpnbMarkdownPanel)selectedCell).getCell());
        final IpnbCodeCell codeCell = new IpnbCodeCell("python", cell.getSource(), null, Lists.newArrayList(), cell.getMetadata());
        if (index >= 0) {
          cells.set(index, codeCell);
        }

        myIpnbFilePanel.replaceComponent(selectedCell, codeCell);
      }
    }
    else if (selectedCell instanceof IpnbCodePanel) {
      final IpnbCodeCell cell = ((IpnbCodePanel)selectedCell).getCell();
      if (selectedItem.startsWith(headingCellType)) {
        final char c = selectedItem.charAt(selectedItem.length() - 1);
        final int level = Character.getNumericValue(c);
        final List<IpnbCell> cells = myIpnbFilePanel.getIpnbFile().getCells();
        final int index = cells.indexOf(((IpnbCodePanel)selectedCell).getCell());
        final IpnbHeadingCell headingCell = new IpnbHeadingCell(cell.getSource(), level, cell.getMetadata());
        if (index >= 0) {
          cells.set(index, headingCell);
        }
        myIpnbFilePanel.replaceComponent(selectedCell, headingCell);
      }
      else if (selectedItem.equals(markdownCellType)) {
        final List<IpnbCell> cells = myIpnbFilePanel.getIpnbFile().getCells();
        final int index = cells.indexOf(((IpnbCodePanel)selectedCell).getCell());
        final IpnbMarkdownCell markdownCell = new IpnbMarkdownCell(cell.getSource(), cell.getMetadata());
        if (index >= 0) {
          cells.set(index, markdownCell);
        }

        myIpnbFilePanel.replaceComponent(selectedCell, markdownCell);
      }
    }
  }