/*****************************************************************************
* Copyright (c) 2011 CEA LIST.
*
*
* 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:
* Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.infra.hyperlink.ui;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor;
import org.eclipse.papyrus.infra.core.editorsfactory.IPageIconsRegistry;
import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.utils.EditorUtils;
import org.eclipse.papyrus.infra.hyperlink.helper.AbstractHyperLinkHelper;
import org.eclipse.papyrus.infra.hyperlink.messages.Messages;
import org.eclipse.papyrus.infra.hyperlink.object.HyperLinkObject;
import org.eclipse.papyrus.infra.hyperlink.util.HyperLinkContentProvider;
import org.eclipse.papyrus.infra.hyperlink.util.HyperLinkLabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.plugin.AbstractUIPlugin;
/**
* this is the tab in charge to display the hyperlink for the property defaut
*
*/
public class DefaultHyperLinkTab extends AbstractHyperLinkTab {
/**
*
* Constructor.
*
*/
public DefaultHyperLinkTab() {
super();
}
/**
*
* Constructor.
*
* @param tabId
* @param helper
*/
public DefaultHyperLinkTab(final String tabId, final AbstractHyperLinkHelper helper) {
super(tabId, helper);
}
protected TableViewer availableHyperLinkViewer;
protected Button defaultHRight;
protected Button defaultHleft;
protected Button defaultHup;
protected Button defaultHdown;
protected TableViewer defaultHyperLinkViewer;
protected List<HyperLinkObject> defaultHyperLinkObject = new ArrayList<HyperLinkObject>();
protected List<HyperLinkObject> availableHyperLinkObject = new ArrayList<HyperLinkObject>();
protected Composite defaultHyperlinkComposite;
/**
*
* @return get the list of hyperlink that are to be as default hyperlinks
*/
public List<HyperLinkObject> getDefaultHyperLinkObject() {
return defaultHyperLinkObject;
}
/**
*
* @see org.eclipse.papyrus.infra.hyperlink.ui.AbstractHyperLinkTab#init(org.eclipse.swt.custom.CTabFolder, java.util.List,
* org.eclipse.emf.ecore.EObject)
*
* @param cTabFolder
* @param hyperlinkObjects
* @param element
*/
@Override
public void init(final CTabFolder cTabFolder, List<HyperLinkObject> hyperlinkObjects, EObject element) {
super.init(cTabFolder, hyperlinkObjects, element);
CTabItem tbtmDefaultsHyperlinks = new CTabItem(cTabFolder, SWT.NONE);
tbtmDefaultsHyperlinks.setText(Messages.DefaultHyperLinkTab_DefaultHyperlinks);
defaultHyperlinkComposite = new Composite(cTabFolder, SWT.NONE);
defaultHyperlinkComposite.setBackgroundMode(SWT.INHERIT_DEFAULT);
defaultHyperlinkComposite.setBackground(defaultHyperlinkComposite.getDisplay().getSystemColor(SWT.COLOR_WHITE));
defaultHyperlinkComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
defaultHyperlinkComposite.setLayout(new GridLayout(4, false));
Composite availableHyperlinks = new Composite(defaultHyperlinkComposite, SWT.NONE);
availableHyperlinks.setLayout(new GridLayout(1, true));
availableHyperlinks.setLayoutData(new GridData(GridData.FILL_BOTH));
Composite addRemoveButtonsComposite = new Composite(defaultHyperlinkComposite, SWT.NONE);
addRemoveButtonsComposite.setLayout(new GridLayout(1, true));
addRemoveButtonsComposite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER));
Composite defaultHyperlinks = new Composite(defaultHyperlinkComposite, SWT.NONE);
defaultHyperlinks.setLayout(new GridLayout(1, true));
defaultHyperlinks.setLayoutData(new GridData(GridData.FILL_BOTH));
Composite upDownButtonsComposite = new Composite(defaultHyperlinkComposite, SWT.NONE);
upDownButtonsComposite.setLayout(new GridLayout(1, true));
upDownButtonsComposite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER));
tbtmDefaultsHyperlinks.setControl(defaultHyperlinkComposite);
Label lblHyperlinks = new Label(availableHyperlinks, SWT.NONE);
lblHyperlinks.setText(Messages.DefaultHyperLinkTab_HyperLinks);
Label lblDefaultHyperlinksby = new Label(defaultHyperlinks, SWT.NONE);
lblDefaultHyperlinksby.setText(Messages.DefaultHyperLinkTab_DefaultHyperLinks);
Table availableHyperLink = new Table(availableHyperlinks, SWT.BORDER | SWT.FULL_SELECTION);
availableHyperLink.setLayoutData(new GridData(GridData.FILL_BOTH));
defaultHRight = new Button(addRemoveButtonsComposite, SWT.NONE);
defaultHRight.addMouseListener(new MouseListener() {
public void mouseUp(MouseEvent e) {
}
public void mouseDown(MouseEvent e) {
//move element left to right
if(availableHyperLinkViewer.getSelection() != null) {
//normally this viewer contains only hyperlinkObject
if(availableHyperLinkViewer.getSelection() instanceof IStructuredSelection) {
HyperLinkObject hyperlinkObjectToMove = (HyperLinkObject)((IStructuredSelection)availableHyperLinkViewer.getSelection()).getFirstElement();
hyperlinkObjectToMove.setIsDefault(true);
availableHyperLinkObject.remove(hyperlinkObjectToMove);
defaultHyperLinkObject.add(hyperlinkObjectToMove);
refresh();
}
}
}
public void mouseDoubleClick(MouseEvent e) {
}
});
defaultHRight.setToolTipText("Set default hyperlink");
defaultHleft = new Button(addRemoveButtonsComposite, SWT.NONE);
defaultHleft.addMouseListener(new MouseListener() {
public void mouseUp(MouseEvent e) {
}
public void mouseDown(MouseEvent e) {
//move element right to left
if(defaultHyperLinkViewer.getSelection() != null) {
//normally this viewer contains only hyperlinkObject
if(defaultHyperLinkViewer.getSelection() instanceof IStructuredSelection) {
HyperLinkObject hyperlinkObjectToMove = (HyperLinkObject)((IStructuredSelection)defaultHyperLinkViewer.getSelection()).getFirstElement();
hyperlinkObjectToMove.setIsDefault(false);
defaultHyperLinkObject.remove(hyperlinkObjectToMove);
availableHyperLinkObject.add(hyperlinkObjectToMove);
refresh();
}
}
}
public void mouseDoubleClick(MouseEvent e) {
}
});
defaultHleft.setToolTipText("Remove default hyperlink");
Table defaultHyperLink = new Table(defaultHyperlinks, SWT.BORDER | SWT.FULL_SELECTION);
defaultHyperLink.setLayoutData(new GridData(GridData.FILL_BOTH));
defaultHup = new Button(upDownButtonsComposite, SWT.NONE);
defaultHup.setToolTipText("Move default hyperlink up");
defaultHup.addMouseListener(new MouseListener() {
public void mouseUp(MouseEvent e) {
}
public void mouseDown(MouseEvent e) {
//move element bottom to top
if(defaultHyperLinkViewer.getSelection() != null) {
//normally this viewer contains only hyperlinkObject
if(defaultHyperLinkViewer.getSelection() instanceof IStructuredSelection) {
HyperLinkObject hyperlinkObjectToMove = (HyperLinkObject)((IStructuredSelection)defaultHyperLinkViewer.getSelection()).getFirstElement();
int index = defaultHyperLinkObject.indexOf(hyperlinkObjectToMove);
if(index > 0) {
defaultHyperLinkObject.remove(hyperlinkObjectToMove);
defaultHyperLinkObject.add(index - 1, hyperlinkObjectToMove);
refresh();
}
}
}
}
public void mouseDoubleClick(MouseEvent e) {
}
});
defaultHdown = new Button(upDownButtonsComposite, SWT.NONE);
defaultHdown.setToolTipText("Move default hyperlink down");
defaultHdown.addMouseListener(new MouseListener() {
public void mouseUp(MouseEvent e) {
}
public void mouseDown(MouseEvent e) {
//move element top to bottom
if(defaultHyperLinkViewer.getSelection() != null) {
//normally this viewer contains only hyperlinkObject
if(defaultHyperLinkViewer.getSelection() instanceof IStructuredSelection) {
HyperLinkObject hyperlinkObjectToMove = (HyperLinkObject)((IStructuredSelection)defaultHyperLinkViewer.getSelection()).getFirstElement();
int index = defaultHyperLinkObject.indexOf(hyperlinkObjectToMove);
if(index < defaultHyperLinkObject.size() - 1) {
defaultHyperLinkObject.remove(hyperlinkObjectToMove);
defaultHyperLinkObject.add(index + 1, hyperlinkObjectToMove);
refresh();
}
}
}
}
public void mouseDoubleClick(MouseEvent e) {
}
});
// associate image to buttons
defaultHdown.setImage(AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.papyrus.uml.diagram.common", "/icons/obj16/ArrowDown_16x16.gif").createImage()); //$NON-NLS-1$ //$NON-NLS-2$
defaultHup.setImage(AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.papyrus.uml.diagram.common", "/icons/obj16/ArrowUp_16x16.gif").createImage()); //$NON-NLS-1$ //$NON-NLS-2$
defaultHleft.setImage(AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.papyrus.uml.diagram.common", "/icons/obj16/ArrowLeft_16x16.gif").createImage()); //$NON-NLS-1$ //$NON-NLS-2$
defaultHRight.setImage(AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.papyrus.uml.diagram.common", "/icons/obj16/ArrowRight_16x16.gif").createImage()); //$NON-NLS-1$ //$NON-NLS-2$
IPageIconsRegistry editorRegistry = null;
IMultiDiagramEditor papyrusEditor = EditorUtils.getMultiDiagramEditor();
try {
editorRegistry = papyrusEditor.getServicesRegistry().getService(IPageIconsRegistry.class);
} catch (ServiceException e) {
e.printStackTrace();
}
//init tableviewer
availableHyperLinkViewer = new TableViewer(availableHyperLink);
availableHyperLinkViewer.setLabelProvider(new HyperLinkLabelProvider(editorRegistry));
availableHyperLinkViewer.setContentProvider(new HyperLinkContentProvider());
availableHyperLinkViewer.setInput(hyperlinkObjects);
defaultHyperLinkViewer = new TableViewer(defaultHyperLink);
defaultHyperLinkViewer.setLabelProvider(new HyperLinkLabelProvider(editorRegistry));
defaultHyperLinkViewer.setContentProvider(new HyperLinkContentProvider());
}
/**
*
* @return the composite that manage all widgets in the this tab
*/
protected Composite getMainComposite() {
return defaultHyperlinkComposite;
}
/**
* used to refresh table
*/
protected void refresh() {
availableHyperLinkViewer.setInput(availableHyperLinkObject);
defaultHyperLinkViewer.setInput(defaultHyperLinkObject);
}
/**
* input of this tab
* --> fill all available hyperlinks
* --> fill all default hyperlinks
*
* @param hyperLinkObjectList
* the list of hyperlinks
*/
@Override
public void setInput(List<HyperLinkObject> hyperLinkObjectList) {
defaultHyperLinkObject.clear();
availableHyperLinkObject.clear();
//filter between default and not default
Iterator<HyperLinkObject> iterator = hyperLinkObjectList.iterator();
while(iterator.hasNext()) {
HyperLinkObject hyperlinkObject = iterator.next();
if(hyperlinkObject.getIsDefault()) {
defaultHyperLinkObject.add(hyperlinkObject);
} else {
availableHyperLinkObject.add(hyperlinkObject);
}
}
refresh();
}
}