/***************************************************************************** * Copyright (c) 2010 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.List; import org.eclipse.jface.dialogs.Dialog; 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.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.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; /** * dialog to display a list of hyperlinks. the button ok is use to excute the * action linked to the hyperlink (open new diagram, open new editor...) * */ public class EditorNavigationDialog extends Dialog { // prefered dimension protected int width = 350; protected int height = 150; protected List<HyperLinkObject> hyperlinkObjects; protected HyperLinkContentProvider contentProvider; private TableViewer tableViewer; protected Table availableHyperLink; protected List<HyperLinkObject> hyperlinkResult = new ArrayList<HyperLinkObject>(); /** * * dialog to display a list of hyperlinks. the button ok is use to excute * the action linked to the hyperlink (open new diagram, open new editor...) * * @param parentShell * a shell * @param hyperlinkObjects * the list of hyperlinkObjects */ public EditorNavigationDialog(Shell parentShell, ArrayList<HyperLinkObject> hyperlinkObjects) { super(parentShell); this.hyperlinkObjects = hyperlinkObjects; } @Override protected boolean isResizable() { return true; } @Override protected Control createContents(Composite parent) { super.createContents(parent); Composite defaultHyperlinkComposite = (Composite)getDialogArea(); Label lblHyperlinks = new Label(defaultHyperlinkComposite, SWT.NONE); lblHyperlinks.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK)); lblHyperlinks.setText(Messages.DiagramNavigationDialog_WhichHyperLinksWouldYouToNavigateTo); // creation of the table availableHyperLink = new Table(defaultHyperlinkComposite, SWT.CHECK | SWT.BORDER | SWT.FULL_SELECTION); availableHyperLink.setLayoutData(new GridData(GridData.FILL_BOTH)); // set the content provider this.contentProvider = new HyperLinkContentProvider(); tableViewer = new TableViewer(availableHyperLink); tableViewer.setContentProvider(contentProvider); // set the label provider IPageIconsRegistry editorRegistry = null; IMultiDiagramEditor papyrusEditor = EditorUtils.getMultiDiagramEditor(); try { editorRegistry = papyrusEditor.getServicesRegistry().getService(IPageIconsRegistry.class); } catch (ServiceException e) { e.printStackTrace(); } tableViewer.setLabelProvider(new HyperLinkLabelProvider(editorRegistry)); tableViewer.setInput(this.hyperlinkObjects); //Check the first element by default if(availableHyperLink.getItemCount() > 0) { availableHyperLink.getItem(0).setChecked(true); } getShell().setText(Messages.DiagramNavigationDialog_ChooseHyperLinks); getShell().pack(); return defaultHyperlinkComposite; } /** * get the list of selected hyperlinks * * @return the list */ public List<HyperLinkObject> getSelectedHyperlinks() { return hyperlinkResult; } /** * * @see org.eclipse.jface.dialogs.Dialog#okPressed() * */ @Override protected void okPressed() { hyperlinkResult = new ArrayList<HyperLinkObject>(); TableItem[] tableItems = availableHyperLink.getItems(); for(int i = 0; i < tableItems.length; i++) { if(tableItems[i].getChecked()) { hyperlinkResult.add((HyperLinkObject)tableItems[i].getData()); } } super.okPressed(); } }