/***************************************************************************** * 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: * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.infra.hyperlink.ui; import org.eclipse.core.runtime.Assert; import org.eclipse.emf.ecore.EObject; import org.eclipse.osgi.util.NLS; import org.eclipse.papyrus.infra.core.editorsfactory.IPageIconsRegistry; import org.eclipse.papyrus.infra.hyperlink.helper.EditorHyperLinkHelper; import org.eclipse.papyrus.infra.hyperlink.messages.Messages; import org.eclipse.papyrus.infra.hyperlink.object.HyperLinkEditor; import org.eclipse.papyrus.views.modelexplorer.DecoratingLabelProviderWTooltips; import org.eclipse.papyrus.views.modelexplorer.MoDiscoLabelProvider; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.widgets.Display; /** * * This shell is used to find the editors * */ public class EditorHyperLinkEditorShell extends AbstractEditHyperlinkDocumentShell { /** The usedefault tooltip. */ protected boolean usedefaultTooltip = true; /** The hyper link diagram. */ protected HyperLinkEditor hyperLinkEditor; /** The editor registry. */ private IPageIconsRegistry editorRegistry; /** The amodel. */ protected final EObject amodel; /** * Open. */ public void open() { Display display = Display.getCurrent(); // code use to wait for an action from the user // getEditHyperlinkShell().setBounds(500, 500, 600, 120); getEditHyperlinkShell().pack(); getEditHyperlinkShell().open(); while(!getEditHyperlinkShell().isDisposed()) { if(!display.readAndDispatch()) { display.sleep(); } } } /** * Instantiates a new editor hyperlink diagram shell. * * @param editorFactoryRegistry * the editor factory registry * @param model * the model */ public EditorHyperLinkEditorShell(IPageIconsRegistry editorFactoryRegistry, EObject model) { super(); this.amodel = model; this.editorRegistry = editorFactoryRegistry; createEditHyperlinkShell(); getObjectcLabel().setText(Messages.EditorHyperLinkEditorShell_View); //TODO : where is it used? // intialize "use default" check box getUseDefaultCheckBox().setSelection(usedefaultTooltip); getObjectLabeltext().setEditable(false); if(usedefaultTooltip) { getTooltipInputText().setEditable(false); getTooltipInputText().setText(getObjectLabeltext().getText()); } // add listener "use default button" getUseDefaultCheckBox().addMouseListener(new MouseListener() { public void mouseUp(MouseEvent e) { usedefaultTooltip = getUseDefaultCheckBox().getSelection(); if(usedefaultTooltip) { getTooltipInputText().setEditable(false); getTooltipInputText().setText(getObjectLabeltext().getText()); } else { getTooltipInputText().setEditable(true); } } public void mouseDown(MouseEvent e) { } public void mouseDoubleClick(MouseEvent e) { } }); // launch a new editor to choose or create diagrams getChooseDiagramButton().addMouseListener(new MouseListener() { public void mouseUp(MouseEvent e) { } public void mouseDown(MouseEvent e) { EditorLookForEditorShell editorLookForDiagram = new EditorLookForEditorShell(editorRegistry, amodel); editorLookForDiagram.open(); Object selection = editorLookForDiagram.getSelectedEditor(); if(selection == null) {//cancelled or no selection //nothing to do } else { EditorHyperLinkHelper helper = new EditorHyperLinkHelper(); hyperLinkEditor = helper.getHyperLinkObjectFor(selection); Assert.isNotNull(hyperLinkEditor, NLS.bind(Messages.EditorHyperLinkEditorShell_ICanFindTheHyperLinkEditorObject, selection)); hyperLinkEditor.setObject(selection); //TODO : remove this dependency DecoratingLabelProviderWTooltips labelProvider = new DecoratingLabelProviderWTooltips(new MoDiscoLabelProvider()); getObjectLabeltext().setText(labelProvider.getText(selection)); if(usedefaultTooltip) { getTooltipInputText().setText(getObjectLabeltext().getText()); } } } public void mouseDoubleClick(MouseEvent e) { } }); // listener to cancel this.getCancelButton().addMouseListener(new MouseListener() { public void mouseUp(MouseEvent e) { } public void mouseDown(MouseEvent e) { hyperLinkEditor = null; getEditHyperlinkShell().close(); } public void mouseDoubleClick(MouseEvent e) { } }); // listener to click on OK this.getOkButton().addMouseListener(new MouseListener() { public void mouseUp(MouseEvent e) { } public void mouseDown(MouseEvent e) { if(hyperLinkEditor != null) { hyperLinkEditor.setTooltipText(getTooltipInputText().getText().trim()); // if diagram is null, maybe bad selection or other it // return null! if(hyperLinkEditor.getObject() == null) { hyperLinkEditor = null; } } getEditHyperlinkShell().close(); } public void mouseDoubleClick(MouseEvent e) { } }); } /** * Gets the hyper link diagram. * * @return the hyperLinkEditor maybe null, if cancel or bad selection */ public HyperLinkEditor getHyperLinkEditor() { return hyperLinkEditor; } /** * Sets the hyper link diagram. * * @param hyperLinkEditor * the hyperLinkEditor to set */ public void setHyperLinkEditor(HyperLinkEditor hyperLinkEditor) { //TODO getTooltipInputText().setText(hyperLinkEditor.getTooltipText()); this.hyperLinkEditor = hyperLinkEditor; } }