///*******************************************************************************
// * Copyright (c) 2007 IBM Corporation 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:
// * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
// * - fix for bug 183850, 182652
// * IBM Corporation - initial API and implementation
// ******************************************************************************/
//
//package org.eclipse.jface.viewers;
//
//import org.eclipse.core.runtime.Assert;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.graphics.Color;
//import org.eclipse.swt.graphics.GC;
//import org.eclipse.swt.graphics.Rectangle;
//import org.eclipse.swt.widgets.Event;
//import org.eclipse.swt.widgets.Listener;
//
///**
// * @since 1.0
// *
// */
//public class FocusCellOwnerDrawHighlighter extends FocusCellHighlighter {
//
// private ViewerCell oldCell;
//
// // Needed to work-around problem in bug 183850
// private static final boolean WIN_32 = "win32".equals(SWT.getPlatform()); //$NON-NLS-1$
//
// /**
// * @param viewer
// * the viewer
// */
// public FocusCellOwnerDrawHighlighter(ColumnViewer viewer) {
// super(viewer);
// hookListener(viewer);
// }
//
// private void markFocusedCell(Event event, ViewerCell cell) {
// Color background = getSelectedCellBackgroundColor(cell);
// Color foreground = getSelectedCellForegroundColor(cell);
//
// if ( WIN_32 || foreground != null || background != null) {
// GC gc = event.gc;
//
// if (background == null) {
// background = cell.getItem().getDisplay().getSystemColor(
// SWT.COLOR_LIST_SELECTION);
// }
//
// if (foreground == null) {
// foreground = cell.getItem().getDisplay().getSystemColor(
// SWT.COLOR_LIST_SELECTION_TEXT);
// }
//
// gc.setBackground(background);
// gc.setForeground(foreground);
// gc.fillRectangle(event.getBounds());
//
// // This is a workaround for an SWT-Bug on WinXP bug 169517
// gc.drawText(" ", cell.getBounds().x, cell.getBounds().y, false); //$NON-NLS-1$
// event.detail &= ~SWT.SELECTED;
// }
// }
//
// private void removeSelectionInformation(Event event, ViewerCell cell) {
// GC gc = event.gc;
// gc.setBackground(cell.getViewerRow().getBackground(
// cell.getColumnIndex()));
// gc.setForeground(cell.getViewerRow().getForeground(
// cell.getColumnIndex()));
// gc.fillRectangle(cell.getBounds());
// // This is a workaround for an SWT-Bug on WinXP bug 169517
// gc.drawText(" ", cell.getBounds().x, cell.getBounds().y, false); //$NON-NLS-1$
// event.detail &= ~SWT.SELECTED;
// }
//
// private void hookListener(final ColumnViewer viewer) {
//
// Listener listener = new Listener() {
//
// public void handleEvent(Event event) {
// if ((event.detail & SWT.SELECTED) > 0) {
// ViewerCell focusCell = getFocusCell();
// ViewerRow row = viewer.getViewerRowFromItem(event.item);
//
// Assert
// .isNotNull(row,
// "Internal structure invalid. Item without associated row is not possible."); //$NON-NLS-1$
//
// ViewerCell cell = row.getCell(event.index);
//
// if (focusCell == null || !cell.equals(focusCell)) {
// removeSelectionInformation(event, cell);
// } else {
// markFocusedCell(event, cell);
// }
// }
// }
//
// };
// viewer.getControl().addListener(SWT.EraseItem, listener);
// }
//
// /**
// * @param cell
// * the cell which is colored
// * @return the color
// */
// protected Color getSelectedCellBackgroundColor(ViewerCell cell) {
// return null;
// }
//
// /**
// * @param cell
// * the cell which is colored
// * @return the color
// */
// protected Color getSelectedCellForegroundColor(ViewerCell cell) {
// return null;
// }
//
// /*
// * (non-Javadoc)
// *
// * @see org.eclipse.jface.viewers.FocusCellHighlighter#focusCellChanged(org.eclipse.jface.viewers.ViewerCell)
// */
// protected void focusCellChanged(ViewerCell cell) {
// super.focusCellChanged(cell);
//
// // Redraw new area
// if (cell != null) {
// Rectangle rect = cell.getBounds();
// int x = cell.getColumnIndex() == 0 ? 0 : rect.x;
// int width = cell.getColumnIndex() == 0 ? rect.x + rect.width
// : rect.width;
// // 1 is a fix for Linux-GTK
// cell.getControl().redraw(x, rect.y-1, width, rect.height+1, true);
// }
//
// if (oldCell != null) {
// Rectangle rect = oldCell.getBounds();
// int x = oldCell.getColumnIndex() == 0 ? 0 : rect.x;
// int width = oldCell.getColumnIndex() == 0 ? rect.x + rect.width
// : rect.width;
// // 1 is a fix for Linux-GTK
// oldCell.getControl().redraw(x, rect.y-1, width, rect.height+1, true);
// }
//
// this.oldCell = cell;
// }
//}