/**
   * Calculates the required left indent for a given item, given its type and its hierarchy level.
   */
  static int getIndent(PropertySheetTable table, Item item) {
    int indent = 0;

    if (item.isProperty()) {
      // it is a property, it has no parent or a category, and no child
      if ((item.getParent() == null || !item.getParent().isProperty()) && !item.hasToggle()) {
        indent = table.getWantsExtraIndent() ? HOTSPOT_SIZE : 0;
      } else {
        // it is a property with children
        if (item.hasToggle()) {
          indent = item.getDepth() * HOTSPOT_SIZE;
        } else {
          indent = (item.getDepth() + 1) * HOTSPOT_SIZE;
        }
      }

      if (table.getSheetModel().getMode() == PropertySheet.VIEW_AS_CATEGORIES
          && table.getWantsExtraIndent()) {
        indent += HOTSPOT_SIZE;
      }

    } else {
      // category has no indent
      indent = 0;
    }
    return indent;
  }
 public void mouseReleased(MouseEvent event) {
   PropertySheetTable table = (PropertySheetTable) event.getComponent();
   int row = table.rowAtPoint(event.getPoint());
   int column = table.columnAtPoint(event.getPoint());
   if (row != -1 && column == 0) {
     // if we clicked on an Item, see if we clicked on its hotspot
     Item item = table.getSheetModel().getPropertySheetElement(row);
     int x = event.getX() - getIndent(table, item);
     if (x > 0 && x < HOTSPOT_SIZE) item.toggle();
   }
 }