001 package org.meta_environment.eclipse.terms;
002
003 import java.util.List;
004
005 import org.eclipse.core.runtime.IPath;
006 import org.eclipse.imp.editor.UniversalEditor;
007 import org.eclipse.imp.model.ISourceProject;
008 import org.eclipse.imp.parser.IParseController;
009 import org.eclipse.imp.services.base.DefaultLanguageActionsContributor;
010 import org.eclipse.jface.action.Action;
011 import org.eclipse.jface.action.ControlContribution;
012 import org.eclipse.jface.action.IMenuManager;
013 import org.eclipse.jface.action.IStatusLineManager;
014 import org.eclipse.swt.SWT;
015 import org.eclipse.swt.events.SelectionEvent;
016 import org.eclipse.swt.events.SelectionListener;
017 import org.eclipse.swt.widgets.Combo;
018 import org.eclipse.swt.widgets.Composite;
019 import org.eclipse.swt.widgets.Control;
020
021 public class EditorActionContributor extends DefaultLanguageActionsContributor {
022 public static final String TERM_LANGUAGE_SELECTOR = "term-language-selector";
023
024 public void contributeToEditorMenu(UniversalEditor editor,
025 IMenuManager menuManager) {
026 String file = getFilename(editor);
027 String language = TermEditorTools.getInstance().getLanguage(file);
028 List<Action> actions = TermEditorTools.getInstance().getDynamicActions(language, file);
029
030 for (Action action : actions) {
031 menuManager.add(action);
032 }
033 }
034
035 public void contributeToStatusLine(final UniversalEditor editor, IStatusLineManager statusLineManager) {
036 contributeLanguageSelector(statusLineManager, editor);
037 }
038
039 private void contributeLanguageSelector(IStatusLineManager statusLineManager, final UniversalEditor ed) {
040 statusLineManager.add(new ControlContribution(TERM_LANGUAGE_SELECTOR) {
041 protected Control createControl(Composite parent) {
042 List<String> languages = TermEditorTools.getInstance().getLanguages();
043 final Combo combo = new Combo(parent, SWT.NONE);
044
045 combo.setToolTipText("Select an SDF module to parse this term with");
046 for (String language : languages) {
047 combo.add(language);
048 }
049
050 final String filename = getFilename(ed);
051 final String current = TermEditorTools.getInstance().getLanguage(filename);
052 if (languages.contains(current)) {
053 combo.select(combo.indexOf(current));
054 }
055
056 combo.addSelectionListener(new SelectionListener() {
057
058 public void widgetDefaultSelected(SelectionEvent e) {
059 widgetSelected(e);
060 }
061
062 public void widgetSelected(SelectionEvent e) {
063 if (combo.getText() != null && combo.getText().length() != 0) {
064 TermEditorTools.getInstance().setLanguage(filename, combo.getText());
065 }
066 }
067
068
069 });
070 return combo;
071 }
072 });
073 }
074
075 private String getFilename(final UniversalEditor ed) {
076 IParseController controller = ed.getParseController();
077 ISourceProject project = controller.getProject();
078 IPath path = controller.getPath();
079 String filename;
080
081 if (project != null) {
082 filename = project.getRawProject().getLocation().append(path).makeAbsolute().toOSString();
083 }
084 else {
085 filename = ed.getParseController().getPath().toOSString();
086 }
087 return filename;
088 }
089 }