/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.babel17.netbeans; // org.openide.loaders.DataObject // <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.context"/> /* <attr name="delegate" methodvalue="org.openide.awt.Actions.inject"/> <attr name="displayName" bundlevalue="com.babel17.netbeans.Bundle#CTL_Run91Babel17"/> <attr name="iconBase" stringvalue="com/babel17/netbeans/Babel17RunIcon.png"/> <attr name="injectable" stringvalue="com.babel17.netbeans.Run91Babel17"/> <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.context"/> <attr name="noIconInMenu" boolvalue="false"/> <attr name="selectionType" stringvalue="EXACTLY_ONE"/> <attr name="type" stringvalue="com.babel17.netbeans.Babel17DataObject"/> </file> * */ import com.babel17.naive.*; import javax.swing.ImageIcon; import org.openide.LifecycleManager; import org.openide.filesystems.FileObject; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JMenuItem; import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; import org.openide.filesystems.FileUtil; import org.openide.util.*; import javax.swing.AbstractAction; import java.awt.event.ActionEvent; import java.io.*; import java.util.*; import org.openide.util.actions.Presenter; public final class Run91Babel17 extends AbstractAction implements ContextAwareAction, LookupListener, Presenter.Menu, Presenter.Toolbar { /* public @Override Action createContextAwareInstance(Lookup context) { return this; }*/ //private final Babel17DataObject context; JButton button = null; JMenuItem menuitem = null, popupitem = null; private Lookup.Result<Babel17DataObject> result; public Run91Babel17() { this(Utilities.actionsGlobalContext()); } public Run91Babel17(Lookup context) { super("Run Babel-17 script"); //putValue(NAME, "Run Babel-17 script"); String iconfile = "com/babel17/netbeans/Babel17RunIcon.png"; putValue(SMALL_ICON, new ImageIcon(ImageUtilities.loadImage(iconfile, true))); //this.context = context; //putValue(DynamicMenuContent.HIDE_WHEN_DISABLED, true); result = context.lookupResult(Babel17DataObject.class); result.addLookupListener(this); } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); if (button != null) { button.setEnabled(enabled); button.setVisible(enabled); } if (menuitem != null) { menuitem.setEnabled(enabled); menuitem.setVisible(enabled); } if (popupitem != null) { popupitem.setEnabled(enabled); popupitem.setVisible(enabled); } /*if (!enabled) { for (JComponent c : components) { c.getParent().remove(c); } components.clear(); }*/ } public void actionPerformed(ActionEvent ev) { LifecycleManager.getDefault().saveAll(); Babel17DataObject context = getSelectedObject(); if (context == null) return; final FileObject f = context.getPrimaryFile(); final WriteNetbeansOutput o = WriteNetbeansOutput.get(); final Runnable runnable = new Runnable() { public void run() { try { Project project = FileOwnerQuery.getOwner(f); if (project instanceof Babel17Project) { Babel17Project p = (Babel17Project) project; EvaluationOptions options = new EvaluationOptions(true, p.getPreferences().get("JAVALIBS", "")); String[] sources = p.getSourceFiles(); String[] args = new String[sources.length+1]; args[0] = f.getPath().toString(); for (int i=0; i<sources.length; i++) args[i+1] = sources[i]; Interpreter.run(options, 0, args, o); } else { EvaluationOptions options = new EvaluationOptions(true, ""); Interpreter.run(options, 0, new String[]{f.getPath().toString()}, o); } } finally { o.done(); } } }; RequestProcessor.getDefault().post(runnable); } public Babel17DataObject getSelectedObject() { java.util.Collection<? extends Babel17DataObject> coll = result.allInstances(); if (coll.size() != 1) return null; else { Babel17DataObject dobj = null; for (Babel17DataObject f : coll) { dobj = f; } return dobj; } } public void resultChanged(LookupEvent e) { this.setEnabled(getSelectedObject() != null); } public JMenuItem getMenuPresenter() { menuitem = new JMenuItem(this); menuitem.setEnabled(false); menuitem.setVisible(false); //components.add(item); return menuitem; } /*public JMenuItem getPopupPresenter() { popupitem = new JMenuItem(this); popupitem.setEnabled(false); popupitem.setVisible(false); //components.add(item); return popupitem; }*/ public JButton getToolbarPresenter() { button = new JButton(this); button.setText(""); button.setEnabled(false); button.setVisible(false); //components.add(button); return button; } public Action createContextAwareInstance(Lookup context) { return new Run91Babel17(context); } }