package org.openflexo.fib.editor.controller; import java.awt.Point; import java.util.logging.Logger; import org.openflexo.fib.editor.view.FIBEditableViewDelegate.FIBDropTarget; import org.openflexo.fib.model.FIBComponent; import org.openflexo.fib.model.FIBContainer; import org.openflexo.logging.FlexoLogger; public class DraggedFIBComponent implements FIBDraggable { private static final Logger logger = FlexoLogger.getLogger(FIBEditorController.class.getPackage().getName()); private FIBComponent draggedComponent; public DraggedFIBComponent(FIBComponent draggedComponent) { this.draggedComponent = draggedComponent; } @Override public void enableDragging() { System.out.println("Enable dragging for " + draggedComponent); } @Override public void disableDragging() { System.out.println("Disable dragging for " + draggedComponent); } @Override public boolean acceptDragging(FIBDropTarget target) { // System.out.println("acceptDragging ? for component: " + target.getFIBComponent() + " place holder: " + target.getPlaceHolder()); return true; } @Override public boolean elementDragged(FIBDropTarget target, Point pt) { logger.info("Nous y voila: element dragged with component: " + target.getFIBComponent() + " place holder: " + target.getPlaceHolder()); /*if (target.getPlaceHolder() == null) { boolean deleteIt = JOptionPane.showConfirmDialog(_palette.getEditorController().getEditor().getFrame(), target.getFIBComponent() + ": really delete this component (undoable operation) ?", "information", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE) == JOptionPane.YES_OPTION; if (!deleteIt) { return false; } }*/ try { if (target.getPlaceHolder() != null) { target.getPlaceHolder().willDelete(); FIBContainer oldParent = draggedComponent.getParent(); draggedComponent.getParent().removeFromSubComponentsNoNotification(draggedComponent); target.getPlaceHolder().insertComponent(draggedComponent); target.getPlaceHolder().hasDeleted(); oldParent.notifyComponentMoved(draggedComponent); return true; } /*else { FIBComponent targetComponent = target.getFIBComponent(); FIBContainer containerComponent = targetComponent.getParent(); if (containerComponent == null) return false; if (targetComponent instanceof FIBTab && !(newComponent instanceof FIBPanel)) return false; if (targetComponent.getParent() instanceof FIBTabPanel && newComponent instanceof FIBPanel) { // Special case where a new tab is added to a FIBTabPanel FIBTab newTabComponent = new FIBTab(); newTabComponent.setTitle("NewTab"); newTabComponent.setIndex(((FIBTabPanel) targetComponent.getParent()).getSubComponents().size()); ((FIBTabPanel) targetComponent.getParent()).addToSubComponents(newTabComponent); return true; } else { // Normal case, we replace targetComponent by newComponent ComponentConstraints constraints = targetComponent.getConstraints(); containerComponent.removeFromSubComponentsNoNotification(targetComponent); // No notification, we will do it later, to avoid reindexing targetComponent.delete(); containerComponent.addToSubComponents(newComponent, constraints); return true; } }*/ return false; } catch (Exception e) { e.printStackTrace(); logger.warning("Unexpected exception: " + e); return false; } } }