1 /*******************************************************************************
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * VTT Technical Research Centre of Finland - initial API and implementation
11 *******************************************************************************/
12 package org.simantics.spreadsheet.ui;
14 import java.awt.Point;
15 import java.awt.datatransfer.DataFlavor;
16 import java.awt.datatransfer.Transferable;
17 import java.awt.datatransfer.UnsupportedFlavorException;
18 import java.awt.dnd.DropTargetDragEvent;
19 import java.awt.dnd.DropTargetDropEvent;
20 import java.awt.dnd.DropTargetEvent;
21 import java.io.IOException;
23 import javax.swing.JTable;
25 import org.simantics.spreadsheet.Adaptable;
26 import org.simantics.spreadsheet.CellEditor;
27 import org.simantics.spreadsheet.ClientModel;
29 public class TableDropTargetListener implements java.awt.dnd.DropTargetListener {
33 ClientModel clientModel;
35 public TableDropTargetListener(JTable table, Adaptable model, ClientModel clientModel) {
38 this.clientModel = clientModel;
41 public void dragEnter(DropTargetDragEvent dropTargetDragEvent) {
42 dropTargetDragEvent.acceptDrag(dropTargetDragEvent.getDropAction());
43 // Setup positioning info for auto-scrolling
44 // top = Math.abs(getLocation().y);
45 // bottom = top + getParent().getHeight();
46 // topRow = getClosestRowForLocation(0, top);
47 // bottomRow = getClosestRowForLocation(0, bottom);
48 // insets = new Insets(top + 10, 0, bottom - 10, getWidth());
51 public void dragExit(DropTargetEvent dropTargetEvent) {
54 public void dragOver(DropTargetDragEvent dropTargetDragEvent) {
57 public void dropActionChanged(DropTargetDragEvent dropTargetDragEvent) {
60 public synchronized void drop(final DropTargetDropEvent dropTargetDropEvent) {
62 Transferable tr = dropTargetDropEvent.getTransferable();
64 if (tr.isDataFlavorSupported(DataFlavor.stringFlavor)) {
68 dropTargetDropEvent.acceptDrop(dropTargetDropEvent.getDropAction());
70 String data = (String) tr.getTransferData(DataFlavor.stringFlavor);
72 Point point = dropTargetDropEvent.getLocation();
73 int row = table.rowAtPoint(point);
74 int column = table.columnAtPoint(point);
76 CellEditor e = (CellEditor)model.getAdapter(CellEditor.class);
77 TextTableCellEditor editor = new TextTableCellEditor(row, column, "", e, clientModel);
80 } catch (UnsupportedFlavorException e) {
81 // TODO Auto-generated catch block
83 } catch (IOException e) {
84 // TODO Auto-generated catch block
86 } catch (IllegalArgumentException e) {
87 // TODO Auto-generated catch block