@Override
    public void updateAll() {
      if (notifyUpdateCalled) return;
      int size = rowList.size();

      int toolbarIconHeight = 0;
      // If displaying toolbarIcon is set, row height must be at least 32
      // + 1:
      if (isColumnInModel(tableColumns[1])) toolbarIconHeight = 32 + 1;
      /*
       * FIXME: The cell content is not aligned vertically centered. I
       * don't think it is possible to easily solve this because JTable
       * does not offer a convenient way for vertical alignment of the
       * cell content. Probably
       * http://articles.techrepublic.com.com/5100-10878_11-5032692.html
       * may help, or to use the same technique which is introduced in
       * GeoGebraCAS.
       */

      for (int i = 0; i < size; ++i) {
        RowData row = rowList.get(i);
        row.updateAll();

        // it seems there isn't fit to content (automatic) row height in
        // JTable,
        // so we use the most frequent option, 2 lines of text in a row
        // (this is still better than 1 lines of text in a row)
        if (row.getIncludesIndex()) {
          table.setRowHeight(i, Math.max((table.getFont().getSize() * 2 + 16), toolbarIconHeight));
        } else {
          table.setRowHeight(i, Math.max((table.getFont().getSize() * 2 + 12), toolbarIconHeight));
        }
      }
      ctDataImpl.fireTableRowsUpdated(0, size - 1);
    }
 @Override
 public void fireTableRowsInserted(int firstRow, int lastRow) {
   ctDataImpl.fireTableRowsInserted(firstRow, lastRow);
 }
 @Override
 protected void fireTableRowsUpdated(int rowNumber, int rowNumber2) {
   ctDataImpl.fireTableRowsUpdated(rowNumber, rowNumber2);
 }