tuleap #838 adjust tooltip for the column in the dashboard.

Change-Id: I755b82792145fc529edd84ab036fb6b130717e4b
Signed-off-by: Jacques Bouthillier <lmcbout@gmail.com>
diff --git a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/UIReviewTable.java b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/UIReviewTable.java
index e9bde8f..0dc0a0f 100644
--- a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/UIReviewTable.java
+++ b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/UIReviewTable.java
@@ -18,6 +18,7 @@
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.egerrit.internal.dashboard.ui.GerritUi;
 import org.eclipse.egerrit.internal.dashboard.ui.commands.table.AdjustMyStarredHandler;
+import org.eclipse.egerrit.internal.dashboard.ui.utils.UIUtils;
 import org.eclipse.egerrit.internal.dashboard.ui.views.GerritTableView;
 import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
 import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
@@ -160,18 +161,15 @@
 			table.addListener(SWT.MouseMove, event -> tip.setVisible(false));
 
 			table.addListener(SWT.MouseHover, event -> {
-				Point pt = new Point(event.x, event.y);
-				ViewerCell viewerCell = fViewer.getCell(pt);
+				ViewerCell viewerCell = UIUtils.getAdjustedViewerCell(event, aViewer);
 				if (viewerCell != null) {
 					int columnIndex = viewerCell.getColumnIndex();
 					TableItem item = (TableItem) viewerCell.getViewerRow().getItem();
 					Rectangle rect = item.getBounds(columnIndex);
-					if (rect.contains(pt)) {
-						tip.setMessage(item.getText(columnIndex));
-						Point displayPos = item.getParent().toDisplay(rect.x, rect.y);
-						tip.setLocation(displayPos.x, displayPos.y);
-						tip.setVisible(true);
-					}
+					tip.setMessage(item.getText(columnIndex));
+					Point displayPos = item.getParent().toDisplay(rect.x, rect.y);
+					tip.setLocation(displayPos.x, displayPos.y);
+					tip.setVisible(true);
 				}
 			});
 		}
@@ -321,7 +319,7 @@
 		int nextColumSize = nextTableColumn.length;
 		int numberColumnToMove = 0;
 		for (int i = 0; i < nextColumSize; i++) {
-			if ((nextTableColumn[i] >= nextColumSize)) {
+			if (nextTableColumn[i] >= nextColumSize) {
 				numberColumnToMove++;
 				//Move by one slot the array
 				System.arraycopy(columnOrderStored, i + numberColumnToMove, nextTableColumn, i, nextColumSize - i);
@@ -332,6 +330,20 @@
 
 		fViewer.getTable().setColumnOrder(nextTableColumn);
 
+		restoreColumnWidth(columnOrderStored, columInTable, oldvalue, lastStoredColumnSize, nextTableColumn);
+
+	}
+
+	/**
+	 * @param columnOrderStored
+	 * @param columInTable
+	 * @param oldvalue
+	 * @param lastStoredColumnSize
+	 * @param nextTableColumn
+	 */
+	private void restoreColumnWidth(int[] columnOrderStored, int columInTable, int[] oldvalue, int lastStoredColumnSize,
+			int[] nextTableColumn) {
+		String[] backedUpValue;
 		//Lets deal now with the columns width
 		backedUpValue = getDialogSettings().getArray(VIEW_COLUMN_WIDTH);
 		if (backedUpValue == null) {
@@ -371,7 +383,6 @@
 			}
 			fViewer.getTable().getColumn(testCol).setWidth(defaultWidth);
 		}
-
 	}
 
 	/**
diff --git a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/utils/UIUtils.java b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/utils/UIUtils.java
index 62adb77..f252ac0 100644
--- a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/utils/UIUtils.java
+++ b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/utils/UIUtils.java
@@ -18,9 +18,16 @@
 import org.eclipse.egerrit.internal.dashboard.ui.GerritUi;
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+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.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Widget;
 import org.osgi.service.prefs.BackingStoreException;
 import org.osgi.service.prefs.Preferences;
 
@@ -111,4 +118,21 @@
 		return dialog.getReturnCode();
 	}
 
+	/**
+	 * Return the value of the viewer cell adjusted if the viewing area has a horizontal scroll
+	 *
+	 * @param event
+	 * @return
+	 */
+	public static ViewerCell getAdjustedViewerCell(Event event, TableViewer aViewer) {
+		ViewerCell viewerCellAdjusted = null;
+		Widget widget = event.widget;
+		if (widget instanceof Table) {
+			Table tableEvent = (Table) widget;
+			Rectangle clientArea = tableEvent.getClientArea();
+			Point adjustedPoint = new Point(event.x + clientArea.x, event.y);
+			viewerCellAdjusted = aViewer.getCell(adjustedPoint);
+		}
+		return viewerCellAdjusted;
+	}
 }
diff --git a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/views/VoteHandler.java b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/views/VoteHandler.java
index ead2973..fc2de07 100644
--- a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/views/VoteHandler.java
+++ b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/views/VoteHandler.java
@@ -28,7 +28,6 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.MouseEvent;
 import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
@@ -132,15 +131,18 @@
 	}
 
 	private String getRequestedLabel(Event event) {
-		ViewerCell viewerCell = table.getCell(new Point(event.x, event.y));
-		if (viewerCell != null) {
-			return view.getReviewTable().getColumnLabel(viewerCell.getColumnIndex());
+		ViewerCell viewerCellAdjusted = UIUtils.getAdjustedViewerCell(event, table);
+
+		//Viewer cell adjusted if there is an horizontal scroll or not
+		if (viewerCellAdjusted != null) {
+			return view.getReviewTable().getColumnLabel(viewerCellAdjusted.getColumnIndex());
 		}
 		return null;
 	}
 
 	private ChangeInfo fromEventToChangeInfo(Event event) {
-		ViewerCell viewerCell = table.getCell(new Point(event.x, event.y));
+		ViewerCell viewerCell = UIUtils.getAdjustedViewerCell(event, table);
+
 		if (viewerCell != null) {
 			Object element = viewerCell.getViewerRow().getItem().getData();
 			if (element instanceof ChangeInfo) {