Java tutorial
/******************************************************************************* * Copyright (c) 2014 Christian Pontesegger and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Christian Pontesegger - initial API and implementation *******************************************************************************/ package com.starterkit.todo.Tracker; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; public class TableColumnTracker implements Listener { public static final int NO_COLUMN = -1; private final TableViewer fTableViewer; private boolean fHeaderArea = false; private int fSelectedColumnIndex = NO_COLUMN; public TableColumnTracker(TableViewer tableViewer) { fTableViewer = tableViewer; fTableViewer.getTable().addListener(SWT.MenuDetect, this); } @Override public void handleEvent(Event event) { Table table = fTableViewer.getTable(); Point point = Display.getDefault().map(null, table, new Point(event.x, event.y)); Rectangle clientArea = table.getClientArea(); fHeaderArea = (clientArea.y <= point.y) && (point.y < (clientArea.y + table.getHeaderHeight())); ViewerCell cell = fTableViewer.getCell(point); if (cell != null) fSelectedColumnIndex = cell.getColumnIndex(); else { // no cell detected, click on header int xOffset = point.x; int columnIndex = 0; int[] order = table.getColumnOrder(); while ((columnIndex < table.getColumnCount()) && (xOffset > table.getColumn(order[columnIndex]).getWidth())) { xOffset -= table.getColumn(order[columnIndex]).getWidth(); columnIndex++; } fSelectedColumnIndex = (columnIndex < table.getColumnCount()) ? order[columnIndex] : NO_COLUMN; } } public boolean isHeaderArea() { return fHeaderArea; } public int getSelectedColumnIndex() { return fSelectedColumnIndex; } }