@Override
	public void mousePressed(MouseEvent event) {
		if (isEnabled()) {
			Row rollRow = null;
			try {
				boolean local = event.getSource() == this;
				int x = event.getX();
				int y = event.getY();
				Row rowHit;
				int rowIndexHit;
				Column column;
				requestFocus();
				mSelectOnMouseUp = -1;
				mDividerDrag = overColumnDivider(x);
				if (mDividerDrag != null) {
					if (allowColumnResize()) {
						mColumnStart = getColumnStart(mDividerDrag);
					}
				} else if (local) {
					column = overColumn(x);
					rowHit = overRow(y);
					if (column != null && rowHit != null) {
						if (overDisclosureControl(x, y, column, rowHit)) {
							Rectangle bounds = getCellBounds(rowHit, column);
							bounds.width = mModel.getIndentWidth(rowHit, column);
							rollRow = mRollRow;
							repaint(bounds);
							rowHit.setOpen(!rowHit.isOpen());
							return;
						}
					}
					int method = Selection.MOUSE_NONE;

					rowIndexHit = overRowIndex(y);

					if (event.isShiftDown()) {
						method |= Selection.MOUSE_EXTEND;
					}
					if ((event.getModifiers() & getToolkit().getMenuShortcutKeyMask()) != 0 && !event.isPopupTrigger()) {
						method |= Selection.MOUSE_FLIP;
					}
					mSelectOnMouseUp = mModel.getSelection().selectByMouse(rowIndexHit, method);
					reapplyRowFilter();
					if (event.isPopupTrigger()) {
						mSelectOnMouseUp = -1;
						showContextMenu(event);
					}
				}
			} finally {
				repaintChangedRollRow(rollRow);
			}
		}
	}