/*****************************************************************************
* 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:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
*****************************************************************************/
package org.eclipse.papyrus.uml.properties.widgets;
import java.util.LinkedList;
import org.eclipse.papyrus.infra.widgets.editors.IElementSelectionListener;
import org.eclipse.papyrus.infra.widgets.editors.IElementSelector;
import org.eclipse.papyrus.infra.widgets.selectors.StringSelector;
import org.eclipse.papyrus.uml.properties.expression.ExpressionList.Expression;
import org.eclipse.papyrus.uml.properties.preferences.LanguageRegistry;
import org.eclipse.papyrus.views.properties.widgets.layout.GridData;
import org.eclipse.papyrus.views.properties.widgets.layout.PropertiesLayout;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Text;
/**
* An IElementSelector for UML Expressions' languages.
* This selectors allows the user to select a language from a list of
* registered languages, or to type directly the name of a language
* (Which may have been registered or not).
*
* @author Camille Letavernier
*/
public class LanguageSelector extends StringSelector {
private Text text;
private List list;
/**
* Returns a single-element array containing the current text
*
* {@link IElementSelector#getSelectedElements()}
*/
@Override
public Object[] getSelectedElements() {
java.util.List<String> languageNames = new LinkedList<String>();
if(text.getText() != null && !text.getText().trim().equals("")) { //$NON-NLS-1$
languageNames.add(text.getText());
} else {
String[] selection = list.getSelection();
if(selection.length > 0) {
for(String languageName : selection) {
languageNames.add(languageName);
}
}
list.setSelection(-1);
}
java.util.List<Expression> result = new LinkedList<Expression>();
for(String languageName : languageNames) {
Expression expression = new Expression();
expression.setLanguage(languageName);
result.add(expression);
}
text.setText(""); //$NON-NLS-1$
return result.toArray();
}
/**
* {@inheritDoc}
*/
@Override
public void createControls(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new PropertiesLayout());
text = new Text(container, SWT.NONE | SWT.BORDER);
list = new List(container, SWT.MULTI | SWT.BORDER);
list.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
for(String language : LanguageRegistry.instance.getLanguages()) {
list.add(language);
}
list.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
//Nothing
}
public void widgetDefaultSelected(SelectionEvent e) {
if(!elementSelectionListeners.isEmpty()) {
Object[] value = getSelectedElements();
for(IElementSelectionListener listener : elementSelectionListeners) {
listener.addElements(value);
}
}
}
});
}
/**
* Returns all the known languages
*
* @see org.eclipse.papyrus.infra.widgets.editors.IElementSelector#getAllElements()
*/
@Override
public Object[] getAllElements() {
java.util.List<Expression> result = new LinkedList<Expression>();
for(String language : list.getItems()) {
Expression expression = new Expression();
expression.setLanguage(language);
result.add(expression);
}
list.setSelection(-1);
return result.toArray();
}
}