// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package com.amalto.workbench.editors;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.DragSourceListener;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.DropTargetListener;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.widgets.FormToolkit;
import com.amalto.workbench.dialogs.MenuEntryDialog;
import com.amalto.workbench.i18n.Messages;
import com.amalto.workbench.image.EImage;
import com.amalto.workbench.image.ImageCache;
import com.amalto.workbench.models.TreeObject;
import com.amalto.workbench.providers.XObjectEditorInput;
import com.amalto.workbench.utils.Util;
import com.amalto.workbench.webservices.WSMenu;
import com.amalto.workbench.webservices.WSMenuEntry;
import com.amalto.workbench.webservices.WSMenuMenuEntriesDescriptions;
public class MenuMainPage extends AMainPageV2 {
private static Log log = LogFactory.getLog(MenuMainPage.class);
public final static int LOCATION_BEFORE = 0;
public final static int LOCATION_AFTER = 1;
public final static int LOCATION_UNDER = 2;
protected Text descriptionText;
protected TreeViewer menuTree = null;
protected MenuManager menuTreeMgr = null;
protected DropTarget windowTarget;
protected boolean refreshing = false;
protected boolean comitting = false;
private String uripre;
private TreeObject treeObject;
public MenuMainPage(FormEditor editor) {
super(editor, MenuMainPage.class.getName(), Messages.MenuMainPage_Menu
+ ((XObjectEditorInput) editor.getEditorInput()).getName()
+ Util.getRevision((TreeObject) ((XObjectEditorInput) editor.getEditorInput()).getModel()));
treeObject = (TreeObject) ((XObjectEditorInput) editor.getEditorInput()).getModel();
uripre = treeObject.getEndpointIpAddress();
}
@Override
protected void createCharacteristicsContent(FormToolkit toolkit, Composite mainComposite) {
try {
// description
Label descriptionLabel = toolkit.createLabel(mainComposite, Messages.MenuMainPage_Description, SWT.NULL);
descriptionLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 1, 1));
descriptionText = toolkit.createText(mainComposite, "", SWT.BORDER);//$NON-NLS-1$
descriptionText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
((GridData) descriptionText.getLayoutData()).minimumHeight = 30;
descriptionText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
if (refreshing) {
return;
}
markDirtyWithoutCommit();
}
});
// Util.createCompDropTarget(descriptionText);
// make the Page window a DropTarget - we need to dispose it
windowTarget = new DropTarget(this.getPartControl(), DND.DROP_MOVE);
windowTarget.setTransfer(new Transfer[] { TextTransfer.getInstance() });
windowTarget.addDropListener(new DCDropTargetListener());
Composite composite = toolkit.createComposite(mainComposite, SWT.BORDER);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
composite.setLayout(new GridLayout(1, false));
menuTree = new TreeViewer(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
menuTree.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
((GridData) menuTree.getControl().getLayoutData()).heightHint = 150;
menuTree.setContentProvider(new ITreeContentProvider() {
public void dispose() {
}
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof TreeEntry) {
WSMenuEntry wsEntry = ((TreeEntry) parentElement).getWSMenuEntry();
if (wsEntry.getSubMenus() != null) {
TreeEntry[] children = new TreeEntry[wsEntry.getSubMenus().size()];
for (int i = 0; i < wsEntry.getSubMenus().size(); i++) {
children[i] = new TreeEntry((TreeEntry) parentElement, wsEntry.getSubMenus().get(i));
}
return children;
}
return null;
}
if (parentElement instanceof WSMenu) { // the root
java.util.List<WSMenuEntry> menuEntries = ((WSMenu) parentElement).getMenuEntries();
if (menuEntries != null) {
TreeEntry[] children = new TreeEntry[menuEntries.size()];
for (int i = 0; i < menuEntries.size(); i++) {
children[i] = new TreeEntry(null, menuEntries.get(i));
}
return children;
}
return null;
}
return null; // ??!!?
}
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
return ((getChildren(element) == null) || (getChildren(element).length > 0));
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
});
menuTree.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
WSMenuEntry wsMenuEntry = ((TreeEntry) element).getWSMenuEntry();
StringBuffer label = new StringBuffer(wsMenuEntry.getId() + " - ");//$NON-NLS-1$
for (WSMenuMenuEntriesDescriptions description : wsMenuEntry.getDescriptions()) {
label.append("[").append(description.getLanguage()).append(": ")//$NON-NLS-1$//$NON-NLS-2$
.append(description.getLabel()).append("] ");//$NON-NLS-1$
}
if (label.length() > 200) {
return label.substring(0, 197) + "..."; //$NON-NLS-1$
}
return label.toString();
}
@Override
public Image getImage(Object element) {
return ImageCache.getCreatedImage(EImage.MENU.getPath());
}
});
menuTreeMgr = new MenuManager();
menuTreeMgr.setRemoveAllWhenShown(true);
menuTreeMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
IStructuredSelection selection = ((IStructuredSelection) menuTree.getSelection());
if ((selection == null) || (selection.getFirstElement() == null)) {
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
return;
}
// TreeEntry entry = (TreeEntry)selection.getFirstElement();
menuTreeMgr.add(new TreeEntryEditAction(menuTree));
menuTreeMgr.add(new TreeEntryAddAction(menuTree, LOCATION_BEFORE));
menuTreeMgr.add(new TreeEntryAddAction(menuTree, LOCATION_AFTER));
menuTreeMgr.add(new TreeEntryAddAction(menuTree, LOCATION_UNDER));
menuTreeMgr.add(new TreeEntryDeleteAction(menuTree));
menuTreeMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
});
menuTree.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
(new TreeEntryEditAction(menuTree)).run();
}
});
Menu menu = menuTreeMgr.createContextMenu(menuTree.getControl());
menuTree.getControl().setMenu(menu);
getSite().registerContextMenu(menuTreeMgr, menuTree);
refreshData();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}// createCharacteristicsContent
@Override
protected void refreshData() {
try {
// System.out.println("refreshData() ");
if (this.comitting) {
return;
}
this.refreshing = true;
WSMenu wsMenu = (WSMenu) (getXObject().getWsObject());
descriptionText.setText(wsMenu.getDescription() == null ? "" : wsMenu.getDescription()); //$NON-NLS-1$
menuTree.setInput(wsMenu);
this.refreshing = false;
} catch (Exception e) {
log.error(e.getMessage(), e);
MessageDialog.openError(this.getSite().getShell(), Messages.MenuMainPage_ErrorRefreshingPage,
Messages.bind(Messages.MenuMainPage_ErrorRefreshingPageXX, e.getLocalizedMessage()));
}
}
@Override
protected void commit() {
try {
// System.out.println("commit() ROLE\n"+role.toString());
if (this.refreshing) {
return;
}
this.comitting = true;
// commit as we go
WSMenu wsMenu = ((WSMenu) getXObject().getWsObject());
wsMenu.setDescription(descriptionText.getText());
this.comitting = false;
} catch (Exception e) {
log.error(e.getMessage(), e);
MessageDialog.openError(this.getSite().getShell(), Messages.MenuMainPage_ErrorCommitingPage,
Messages.bind(Messages.MenuMainPage_ErrorCommitingPageXX, e.getLocalizedMessage()));
}
}
@Override
protected void createActions() {
}
/*
* private void hookContextMenu(TreeViewer viewer) { }
*
* private void fillContextMenu(IMenuManager manager) { }
*/
@Override
public void dispose() {
super.dispose();
windowTarget.dispose();
}
class TreeEntry {
private TreeEntry parentTreeEntry; // null for the root
private WSMenuEntry wsMenuEntry; // null for an attribute
public TreeEntry(TreeEntry parentTreeEntry, WSMenuEntry wsMenuEntry) {
super();
this.parentTreeEntry = parentTreeEntry;
this.wsMenuEntry = wsMenuEntry;
}
public TreeEntry getParentTreeEntry() {
return parentTreeEntry;
}
public void setParentTreeEntry(TreeEntry parentTreeEntry) {
this.parentTreeEntry = parentTreeEntry;
}
public WSMenuEntry getWSMenuEntry() {
return wsMenuEntry;
}
public void setWSMenuEntry(WSMenuEntry wsMenuEntry) {
this.wsMenuEntry = wsMenuEntry;
}
}
class MenuEntryDialogSelectionListener implements SelectionListener {
protected TreeViewer viewer = null;
protected TreeEntry treeEntry = null;
public MenuEntryDialogSelectionListener(TreeViewer viewer, TreeEntry treeEntry) {
super();
this.viewer = viewer;
this.treeEntry = treeEntry;
}
public void widgetSelected(SelectionEvent e) {
MenuEntryDialog dlg = (MenuEntryDialog) ((Widget) e.getSource()).getData("dialog");//$NON-NLS-1$
if (dlg.getReturnCode() == Window.OK) {
String id = dlg.getIdText().getText();
if ("".equals(id)) {//$NON-NLS-1$
MessageDialog.openError(viewer.getControl().getShell(), Messages._Error,
Messages.MenuMainPage_IDCannotbeEmpty);
return;
}
LinkedHashMap<String, String> descriptions = ((LinkedHashMap<String, String>) dlg.getDescriptionsTableViewer()
.getInput());
if (descriptions.size() == 0) {
MessageDialog.openError(viewer.getControl().getShell(), Messages._Error, Messages.MenuMainPage_ErrorMsg);
return;
}
treeEntry.getWSMenuEntry().setId(id);
treeEntry.getWSMenuEntry().setContext(
"".equals(dlg.getContextText().getText()) ? null : dlg.getContextText().getText());//$NON-NLS-1$
treeEntry.getWSMenuEntry().setApplication(
"".equals(dlg.getApplicationNameText().getText()) ? null : dlg.getApplicationNameText().getText());//$NON-NLS-1$
treeEntry.getWSMenuEntry().setIcon(
"".equals(dlg.getIconPathText().getText()) ? null : dlg.getIconPathText().getText());//$NON-NLS-1$
treeEntry.getWSMenuEntry().getDescriptions().clear();
for (String isoCode : descriptions.keySet()) {
WSMenuMenuEntriesDescriptions wsDescription = new WSMenuMenuEntriesDescriptions();
wsDescription.setLanguage(isoCode.toUpperCase());
wsDescription.setLabel(descriptions.get(isoCode));
treeEntry.getWSMenuEntry().getDescriptions().add(wsDescription);
}
viewer.setExpandedState(treeEntry, true);
viewer.refresh(treeEntry, true);
markDirtyWithoutCommit();
}
dlg.close();
}
public void widgetDefaultSelected(SelectionEvent e) {
};
}
class TreeEntryEditAction extends Action {
protected TreeViewer viewer = null;
protected TreeEntry treeEntry = null;
protected MenuEntryDialog dlg = null;
public TreeEntryEditAction(TreeViewer view) {
super();
this.viewer = view;
treeEntry = (TreeEntry) ((IStructuredSelection) viewer.getSelection()).getFirstElement();
setImageDescriptor(ImageCache.getImage("icons/edit_obj.gif"));//$NON-NLS-1$
setText(Messages.MenuMainPage_Edit);
setToolTipText(Messages.MenuMainPage_EditThisMenuEntry);
}
@Override
public void run() {
try {
super.run();
// if attribute, edit parent else edit this one
dlg = new MenuEntryDialog(treeEntry.getWSMenuEntry(), new MenuEntryDialogSelectionListener(viewer, treeEntry),
this.viewer.getControl().getShell(), Messages.MenuMainPage_EditTheMenuEntry
+ treeEntry.getWSMenuEntry().getId(), false, uripre, isLocalInput(), treeObject);
dlg.setBlockOnOpen(true);
dlg.open();
} catch (Exception e) {
log.error(e.getMessage(), e);
MessageDialog.openError(
viewer.getControl().getShell(),
Messages._Error,
Messages.bind(Messages.MenuMainPage_ErrorMsg1, treeEntry.getWSMenuEntry().getId(),
e.getLocalizedMessage()));
}
}
@Override
public void runWithEvent(Event event) {
super.runWithEvent(event);
}
}// class RoleMenuTreeEditAction
class TreeEntryAddAction extends Action {
protected TreeViewer viewer = null;
protected TreeEntry treeEntry = null;
protected MenuEntryDialog dlg = null;
protected int location = 0;;
protected int position = 0;
public TreeEntryAddAction(TreeViewer view, int location) {
super();
this.viewer = view;
this.location = location;
String label = "";//$NON-NLS-1$
TreeEntry currentEntry = (TreeEntry) ((IStructuredSelection) viewer.getSelection()).getFirstElement();
WSMenuEntry wsMenuEntry = new WSMenuEntry("", "", null, null, "", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
switch (location) {
case LOCATION_UNDER:
position = currentEntry.getWSMenuEntry().getSubMenus().size();
treeEntry = new TreeEntry(currentEntry, wsMenuEntry);
label = Messages.MenuMainPage_LaelText + currentEntry.getWSMenuEntry().getId();
break;
case LOCATION_BEFORE:
position = findSubMenuPosition(currentEntry);
treeEntry = new TreeEntry(currentEntry.getParentTreeEntry(), wsMenuEntry);
label = Messages.MenuMainPage_LaelText1;
break;
case LOCATION_AFTER:
position = findSubMenuPosition(currentEntry);
treeEntry = new TreeEntry(currentEntry.getParentTreeEntry(), wsMenuEntry);
label = Messages.MenuMainPage_AddAMenuEntryAfter;
break;
}
setImageDescriptor(ImageCache.getImage("icons/add_obj.gif"));//$NON-NLS-1$
setText(label);
setToolTipText(Messages.MenuMainPage_AddAMenuEntry);
}
@Override
public void run() {
try {
super.run();
// if attribute, edit parent else edit this one
dlg = new MenuEntryDialog(new WSMenuEntry(), new MenuEntryDialogSelectionListener(viewer, treeEntry), this.viewer
.getControl().getShell(), Messages.MenuMainPage_NewMenuEntry, uripre, isLocalInput(), treeObject);
dlg.setBlockOnOpen(true);
dlg.open();
if (dlg.getReturnCode() == Window.OK) {
// add the entry to the WS Parent
addSubMenu(treeEntry, position);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
MessageDialog.openError(viewer.getControl().getShell(), Messages._Error,
Messages.bind(Messages.ErrorMsg1, e.getLocalizedMessage()));
}
}
@Override
public void runWithEvent(Event event) {
super.runWithEvent(event);
}
protected int findSubMenuPosition(TreeEntry entry) {
// find the position
if (entry.getParentTreeEntry() == null) { // top level
WSMenu menu = ((WSMenu) viewer.getInput());
for (int i = 0; i < menu.getMenuEntries().size(); i++) {
if (menu.getMenuEntries().get(i).equals(entry.getWSMenuEntry())) {
position = i;
break;
}
}
return position;
}
// sub menu of a menu entry
for (int i = 0; i < entry.getParentTreeEntry().getWSMenuEntry().getSubMenus().size(); i++) {
if (entry.getParentTreeEntry().getWSMenuEntry().getSubMenus().get(i).equals(entry.getWSMenuEntry())) {
position = i;
break;
}
}
return position;
}
protected void addSubMenu(TreeEntry entry, int position) {
ArrayList<WSMenuEntry> list = new ArrayList<WSMenuEntry>();
if (entry.getParentTreeEntry() == null) { // top level
WSMenu menu = ((WSMenu) viewer.getInput());
for (int i = 0; i < menu.getMenuEntries().size(); i++) {
if ((position == i) && (location == LOCATION_BEFORE)) {
list.add(entry.getWSMenuEntry());
}
list.add(menu.getMenuEntries().get(i));
if ((position == i) && (location == LOCATION_AFTER)) {
list.add(entry.getWSMenuEntry());
}
}
menu.getMenuEntries().clear();
menu.getMenuEntries().addAll(list);
viewer.setExpandedState(menu, true);
viewer.refresh(menu, true);
log.info(Messages.MenuMainPage_There);
return;
}
// sub menu of a menu entry
WSMenuEntry wsParent = entry.getParentTreeEntry().getWSMenuEntry();
if ((wsParent.getSubMenus() == null) || (wsParent.getSubMenus().size() == 0)) { // no submenus yet
log.info(Messages.MenuMainPage_here);
wsParent.getSubMenus().clear();
wsParent.getSubMenus().add(entry.getWSMenuEntry());
viewer.setExpandedState(entry.getParentTreeEntry(), true);
viewer.refresh(entry.getParentTreeEntry(), true);
return;
}
for (int i = 0; i < wsParent.getSubMenus().size(); i++) {
if ((position == i) && (location == LOCATION_BEFORE)) {
list.add(entry.getWSMenuEntry());
}
list.add(wsParent.getSubMenus().get(i));
if ((position == i) && (location == LOCATION_AFTER)) {
list.add(entry.getWSMenuEntry());
}
}
if (!list.contains(entry.getWSMenuEntry())) {
list.add(entry.getWSMenuEntry());
}
wsParent.getSubMenus().clear();
wsParent.getSubMenus().addAll(list);
viewer.setExpandedState(entry.getParentTreeEntry(), true);
viewer.refresh(entry.getParentTreeEntry(), true);
}
}// class RoleMenuTreeAddAction
class TreeEntryDeleteAction extends Action {
protected TreeViewer viewer = null;
protected java.util.List<TreeEntry> treeEntries = null;
protected MenuEntryDialog dlg = null;
public TreeEntryDeleteAction(TreeViewer view) {
super();
this.viewer = view;
treeEntries = ((IStructuredSelection) viewer.getSelection()).toList();
setImageDescriptor(ImageCache.getImage("icons/delete_obj.gif"));//$NON-NLS-1$
setText(Messages.MenuMainPage_DelEntry);
setToolTipText(Messages.MenuMainPage_DelMenuEntry);
}
@Override
public void run() {
TreeEntry curRemoved = treeEntries.get(0);
boolean refreshAll = false;
try {
Set<TreeEntry> refreshEntries = new HashSet<MenuMainPage.TreeEntry>();
for (TreeEntry treeEntry : treeEntries) {
curRemoved = treeEntry;
if (treeEntry.getParentTreeEntry() == null) { // top level menu
WSMenu menu = ((WSMenu) viewer.getInput());
if (menu.getMenuEntries().size() == 1) {
MessageDialog.openWarning(MenuMainPage.this.getSite().getShell(),
Messages.MenuMainPage_MenuEntryWarning, Messages.MenuMainPage_ErrorMsg2);
return;
}
menu.getMenuEntries().remove(treeEntry.getWSMenuEntry());
refreshAll = true;
} else {
// sub Menu Entry of a sub menu
TreeEntry parentTreeEntry = treeEntry.getParentTreeEntry();
parentTreeEntry.getWSMenuEntry().getSubMenus().remove(treeEntry.getWSMenuEntry());
refreshEntries.add(parentTreeEntry);
}
}
// refresh the viewer
if (refreshAll) {
viewer.refresh();
} else {
for (TreeEntry parentTreeEntry : refreshEntries) {
viewer.setExpandedState(parentTreeEntry, true);
viewer.refresh(parentTreeEntry, false);
}
}
// mark dirty
markDirtyWithoutCommit();
} catch (Exception e) {
log.error(e.getMessage(), e);
MessageDialog.openError(
viewer.getControl().getShell(),
Messages._Error,
Messages.bind(Messages.MenuMainPage_ErrorMsg3, curRemoved.getWSMenuEntry().getId(),
e.getLocalizedMessage()));
}
}
@Override
public void runWithEvent(Event event) {
super.runWithEvent(event);
}
}// class RoleMenuTreeDeleteAction
/****************************************************************************
* DND
****************************************************************************/
class DCDragSourceListener implements DragSourceListener {
private int selected;
public void dragFinished(DragSourceEvent event) {
Control control = ((DragSource) event.widget).getControl();
if ((control instanceof List) && ((event.detail & DND.DROP_MOVE) == DND.DROP_MOVE)) {
((List) control).remove(selected);
MenuMainPage.this.markDirtyWithoutCommit();
}
}
public void dragSetData(DragSourceEvent event) {
Control control = ((DragSource) event.widget).getControl();
if ((control instanceof List)) {
if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
this.selected = ((List) control).getSelectionIndex();
event.data = ((List) control).getSelection()[0];
}
}
}
public void dragStart(DragSourceEvent event) {
Control control = ((DragSource) event.widget).getControl();
if ((control instanceof List)) {
event.doit = (((List) control).getItemCount() > 0);
}
}
}
class DCDropTargetListener implements DropTargetListener {
public void dragEnter(DropTargetEvent event) {
// priority to copy
if ((event.operations & DND.DROP_COPY) == DND.DROP_COPY) {
event.detail = DND.DROP_COPY;
} else if ((event.operations & DND.DROP_MOVE) == DND.DROP_MOVE) {
event.detail = DND.DROP_MOVE;
} else {
event.detail = DND.DROP_NONE;
}
}
public void dragLeave(DropTargetEvent event) {
}
public void dragOperationChanged(DropTargetEvent event) {
}
public void dragOver(DropTargetEvent event) {
}
public void drop(DropTargetEvent event) {
Control control = ((DropTarget) event.widget).getControl();
if ((control instanceof List) && ((event.operations & DND.DROP_COPY) == DND.DROP_COPY)) {
if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) {
if (!Arrays.asList(((List) control).getItems()).contains(event.data)) {
((List) control).add((String) event.data);
MenuMainPage.this.markDirtyWithoutCommit();
}
}
}
}
public void dropAccept(DropTargetEvent event) {
}
}
}