/******************************************************************************* * Copyright (c) 2008 Hallvard Traetteberg. * 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: * Hallvard Traetteberg - initial API and implementation ******************************************************************************/ package org.eclipse.e4.tm.ui; import org.eclipse.e4.emf.ecore.javascript.JavascriptSupport; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.command.SetCommand; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; public class ScriptSourceView extends AbstractTmSelectionView { public void dispose() { disposeTextControl(scriptTextControl); super.dispose(); } protected void selectionChanged(ISelection selection) { commitScriptText(); String scriptText = null; super.selectionChanged(selection); if (getSelectedEObject() != null) { scriptText = getScriptText(); } setScriptControlText(scriptText); } private String getScriptControlText() { return scriptTextControl.getText(); } private void setScriptControlText(String scriptText) { scriptTextControl.setText(scriptText != null ? scriptText : ""); } protected boolean isValidSelection(Object o) { return o instanceof EObject; } private String getScriptText() { EAttribute scriptAttr = JavascriptSupport.getScriptSourceAttribute(getSelectedEObject(), JavascriptSupport.JAVASCRIPT_EXTENSION); if (scriptAttr != null) { Object value = getSelectedEObject().eGet(scriptAttr); if (value != null) { return value.toString().trim(); } } return ""; } private EObject getSelectedEObject() { return (EObject)this.selection; } private void commitScriptText() { if (editingDomainProvider != null && selection != null) { EAttribute scriptAttr = JavascriptSupport.getScriptSourceAttribute(getSelectedEObject(), JavascriptSupport.JAVASCRIPT_EXTENSION); if (scriptAttr != null) { EditingDomain editingDomain = editingDomainProvider.getEditingDomain(); String scriptText = getScriptControlText(); if (! scriptText.equals(getScriptText())) { Command command = new SetCommand(editingDomain, getSelectedEObject(), scriptAttr, scriptTextControl.getText().trim()); if (command.canExecute()) { editingDomain.getCommandStack().execute(command); } } } } } private Text scriptTextControl; public void createPartControl(Composite parent) { super.createPartControl(parent); scriptTextControl = createTextControl(parent, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); scriptTextControl.addFocusListener(new FocusListener(){ public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { commitScriptText(); } }); } public void setFocus() { scriptTextControl.setFocus(); } }