Bug 8135 fixed: An exception was thrown when restoring files on MacOS X
[scilab.git] / scilab / modules / scinotes / src / java / org / scilab / modules / scinotes / actions / GenerateHelpFromFunctionAction.java
index 0007445..e0a00df 100644 (file)
 
 package org.scilab.modules.scinotes.actions;
 
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.util.List;
 
+import javax.swing.JMenuItem;
 import javax.swing.KeyStroke;
 import javax.swing.text.Element;
 import javax.swing.text.BadLocationException;
@@ -23,7 +26,6 @@ import org.scilab.modules.scinotes.SciNotes;
 import org.scilab.modules.scinotes.ScilabEditorPane;
 import org.scilab.modules.scinotes.ScilabDocument;
 import org.scilab.modules.scinotes.FunctionScanner;
-import org.scilab.modules.scinotes.utils.SciNotesMessages;
 
 /**
  * Generate help from a function definition
@@ -34,7 +36,7 @@ public class GenerateHelpFromFunctionAction extends DefaultAction {
     /**
      * The help template
      */
-    public static final String template = "//\n"
+    public static final String TEMPLATE = "//\n"
         + "//\n"
         + "// Calling Sequence\n"
         + "// [returnValues] = functionName(argsValues) // \n"
@@ -57,10 +59,11 @@ public class GenerateHelpFromFunctionAction extends DefaultAction {
 
     /**
      * Constructor
+     * @param name the name of the action
      * @param editor SciNotes
      */
-    private GenerateHelpFromFunctionAction(SciNotes editor) {
-        super(SciNotesMessages.GENERATE_HELP, editor);
+    public GenerateHelpFromFunctionAction(String name, SciNotes editor) {
+        super(name, editor);
     }
 
     /**
@@ -76,7 +79,7 @@ public class GenerateHelpFromFunctionAction extends DefaultAction {
             ScilabDocument.ScilabLeafElement se = (ScilabDocument.ScilabLeafElement) e;
             if (se.isFunction()) {
                 FunctionScanner.FunctionInfo info = se.getFunctionInfo();
-                String help = template.replaceFirst("functionName", info.functionName);
+                String help = TEMPLATE.replaceFirst("functionName", info.functionName);
                 help = help.replaceFirst("returnValues", generateList(info.returnValues, ", ", ""));
                 help = help.replaceFirst("argsValues", generateList(info.argsValues, ", ", ""));
                 help = help.replaceFirst("returnValuesOnColumn", generateList(info.returnValues, ": \n// ", ": "));
@@ -98,7 +101,7 @@ public class GenerateHelpFromFunctionAction extends DefaultAction {
      */
     private String generateList(List<String> list, String sep, String end) {
         String str = "";
-        for(int i = 0; i < list.size() - 1; i++) {
+        for (int i = 0; i < list.size() - 1; i++) {
             str += list.get(i) + sep;
         }
         if (list.size() >= 1) {
@@ -110,11 +113,24 @@ public class GenerateHelpFromFunctionAction extends DefaultAction {
 
     /**
      * createMenu
+     * @param label label of the menu
      * @param editor SciNotes
      * @param key Keystroke
      * @return MenuItem
      */
-    public static MenuItem createMenu(SciNotes editor, KeyStroke key) {
-        return createMenu(SciNotesMessages.GENERATE_HELP, null, new GenerateHelpFromFunctionAction(editor), key);
+    public static MenuItem createMenu(String label, final SciNotes editor, KeyStroke key) {
+        final MenuItem menuitem = createMenu(label, null, new GenerateHelpFromFunctionAction(label, editor), key);
+        ((JMenuItem) menuitem.getAsSimpleMenuItem()).addPropertyChangeListener(new PropertyChangeListener() {
+                public void propertyChange(PropertyChangeEvent e) {
+                    if (editor.getTextPane() != null) {
+                        Element root = editor.getTextPane().getDocument().getDefaultRootElement();
+                        int pos = editor.getTextPane().getCaretPosition();
+                        ScilabDocument.ScilabLeafElement elem = (ScilabDocument.ScilabLeafElement) root.getElement(root.getElementIndex(pos));
+                        menuitem.setEnabled(elem.isFunction());
+                    }
+                }
+            });
+
+        return menuitem;
     }
 }