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