|
What this is
Other links
The source code/******************************************************************************* * 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: * IBM Corporation - initial API and implementation ******************************************************************************/ package org.eclipse.jface.snippets.viewers; import java.util.ArrayList; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; /** * @since 3.3 * */ public abstract class AbstractCellCursor extends Canvas { private ViewerCell[] cells = new ViewerCell[0]; private ColumnViewer viewer; private int activationTime = 0; private boolean inFocusRequest = false; /** * @param viewer * @param style */ public AbstractCellCursor(ColumnViewer viewer, int style) { super((Composite) viewer.getControl(),style); this.viewer = viewer; Listener l = new Listener() { public void handleEvent(Event event) { switch (event.type) { case SWT.Paint: paint(event); break; case SWT.KeyDown: getParent().notifyListeners(SWT.KeyDown, event); ArrayList list = new ArrayList(); for( int i = 0; i < cells.length; i++ ) { list.add(cells[i].getElement()); } AbstractCellCursor.this.viewer.setSelection(new StructuredSelection(list)); break; case SWT.MouseDown: if( event.time < activationTime ) { Event cEvent = copyEvent(event); cEvent.type = SWT.MouseDoubleClick; getParent().notifyListeners(SWT.MouseDoubleClick, cEvent); } else { getParent().notifyListeners(SWT.MouseDown, copyEvent(event)); } break; case SWT.MouseDoubleClick: getParent().notifyListeners(SWT.MouseDoubleClick, copyEvent(event)); break; case SWT.FocusIn: if( isVisible() ) { inFocusRequest = true; if( ! inFocusRequest ) { forceFocus(); } inFocusRequest = false; } default: break; } } }; addListener(SWT.Paint, l); addListener(SWT.KeyDown, l); addListener(SWT.MouseDown, l); addListener(SWT.MouseDoubleClick, l); getParent().addListener(SWT.FocusIn,l); } /** * @param cell * @param eventTime */ public void setSelection(ViewerCell cell, int eventTime) { this.cells = new ViewerCell[] { cell }; setBounds(cell.getBounds()); forceFocus(); redraw(); activationTime = eventTime + getDisplay().getDoubleClickTime(); } /** * @return the cells who should be highlighted */ protected ViewerCell[] getSelectedCells() { return cells; } private Event copyEvent(Event event) { Event cEvent = new Event(); cEvent.button = event.button; cEvent.character = event.character; cEvent.count = event.count; cEvent.data = event.data; cEvent.detail = event.detail; cEvent.display = event.display; cEvent.doit = event.doit; cEvent.end = event.end; cEvent.gc = event.gc; cEvent.height = event.height; cEvent.index = event.index; cEvent.item = getSelectedCells()[0].getControl(); cEvent.keyCode = event.keyCode; cEvent.start = event.start; cEvent.stateMask = event.stateMask; cEvent.text = event.text; cEvent.time = event.time; cEvent.type = event.type; cEvent.widget = event.widget; cEvent.width = event.width; Point p = viewer.getControl().toControl(toDisplay(event.x, event.y)); cEvent.x = p.x; cEvent.y = p.y; return cEvent; } /** * @param event */ protected abstract void paint(Event event); } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.