Bug 7678 fixed: Help action didn't give help on selection. 64/1564/1
Calixte DENIZET [Fri, 6 Aug 2010 19:50:10 +0000 (21:50 +0200)]
Change-Id: I4231fb315e9abe9457a53f85d85a90edb1e66e49

scilab/CHANGES_5.3.X
scilab/modules/scinotes/src/java/org/scilab/modules/scinotes/actions/HelpOnKeywordAction.java
scilab/modules/scinotes/src/java/org/scilab/modules/scinotes/utils/SciNotesMessages.java
scilab/modules/scinotes/tests/nonreg_tests/bug_7678.tst [new file with mode: 0644]

index 601c161..49a75c5 100644 (file)
@@ -14,6 +14,8 @@ SciNotes:
 
 * bug 7676 fixed - The SaveAs action didn't remove "readonly" mode.
 
+* bug 7678 fixed - Help action didn't give help on selection.
+
 * bug 7682 fixed - The knob of the vertical scrollbar moved badly on resize.
 
 
index 9adcdc8..454cdac 100644 (file)
@@ -14,6 +14,7 @@ package org.scilab.modules.scinotes.actions;
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
+import java.util.StringTokenizer;
 
 import javax.swing.JMenuItem;
 import javax.swing.KeyStroke;
@@ -24,6 +25,7 @@ import org.scilab.modules.scinotes.SciNotes;
 import org.scilab.modules.scinotes.ScilabLexerConstants;
 import org.scilab.modules.scinotes.ScilabEditorPane;
 import org.scilab.modules.scinotes.KeywordEvent;
+import org.scilab.modules.scinotes.utils.SciNotesMessages;
 import org.scilab.modules.action_binding.InterpreterManagement;
 
 /**
@@ -45,13 +47,21 @@ public class HelpOnKeywordAction extends DefaultAction {
      * doAction
      */
     public void doAction() {
-        KeywordEvent kwe = ((ScilabEditorPane) getEditor().getTextPane()).getKeywordEvent();
-        if (ScilabLexerConstants.isHelpable(kwe.getType())) {
-            try {
-                String kw = getEditor().getTextPane().getDocument().getText(kwe.getStart(), kwe.getLength());
-            InterpreterManagement.requestScilabExec("help('" + kw + "')");
-            } catch (BadLocationException e) { }
-        }
+        String selection = "";
+        int start = getEditor().getTextPane().getSelectionStart();
+        int end = getEditor().getTextPane().getSelectionEnd();
+        try {
+            if (start == end) {
+                KeywordEvent kwe = ((ScilabEditorPane) getEditor().getTextPane()).getKeywordEvent();
+                if (ScilabLexerConstants.isHelpable(kwe.getType())) {
+                    selection = getEditor().getTextPane().getDocument().getText(kwe.getStart(), kwe.getLength());
+                }
+            } else {
+                selection = getEditor().getTextPane().getDocument().getText(start, end - start);
+            }
+        } catch (BadLocationException e) { }
+
+        InterpreterManagement.requestScilabExec("help('" + selection + "')");
     }
 
     /**
@@ -62,11 +72,29 @@ public class HelpOnKeywordAction extends DefaultAction {
      * @return MenuItem
      */
     public static MenuItem createMenu(String label, final SciNotes editor, KeyStroke key) {
-        final MenuItem menuitem = createMenu(label, null, new HelpOnKeywordAction(label, editor), key);
+        StringTokenizer token = new StringTokenizer(label, ";");
+        final String label1 = token.nextToken();
+        final String label2 = token.nextToken();
+        final MenuItem menuitem = createMenu(label1, null, new HelpOnKeywordAction(label1 + SciNotesMessages.DOTS, editor), key);
         ((JMenuItem) menuitem.getAsSimpleMenuItem()).addPropertyChangeListener(new PropertyChangeListener() {
                 public void propertyChange(PropertyChangeEvent e) {
-                    KeywordEvent kwe = ((ScilabEditorPane) editor.getTextPane()).getKeywordEvent();
-                    menuitem.setEnabled(ScilabLexerConstants.isHelpable(kwe.getType()));
+                    String select = editor.getTextPane().getSelectedText();
+                    if (select == null) {
+                        KeywordEvent kwe = ((ScilabEditorPane) editor.getTextPane()).getKeywordEvent();
+                        if (ScilabLexerConstants.isHelpable(kwe.getType())) {
+                            try {
+                                String kw = editor.getTextPane().getDocument().getText(kwe.getStart(), kwe.getLength());
+                                menuitem.setText(label1 + SciNotesMessages.QUOTE + kw + SciNotesMessages.QUOTE);
+                                menuitem.setEnabled(true);
+                            } catch (BadLocationException ex) { }
+                        } else {
+                            menuitem.setText(label1 + SciNotesMessages.DOTS);
+                            menuitem.setEnabled(false);
+                        }
+                    } else {
+                        menuitem.setText(label2);
+                        menuitem.setEnabled(true);
+                    }
                 }
             });
 
index a074b72..8bfd32a 100644 (file)
@@ -25,6 +25,7 @@ import org.scilab.modules.localization.Messages;
 public class SciNotesMessages {
 
     public static final String DOTS = "...";
+    public static final String QUOTE = "'";
 
     public static final String SCILAB_EDITOR = Messages.gettext("SciNotes");
     public static final String ERROR_WITH_STRING = Messages.gettext("Error while reading the String");
diff --git a/scilab/modules/scinotes/tests/nonreg_tests/bug_7678.tst b/scilab/modules/scinotes/tests/nonreg_tests/bug_7678.tst
new file mode 100644 (file)
index 0000000..770eb3b
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- INTERACTIVE TEST -->
+// <-- TEST WITH SCINOTES -->
+//
+// <-- Non-regression test for bug 7678 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7678
+//
+// <-- Short Description -->
+// Help action didn't give help on selection
+
+// In SciNotes, select a word or a group of words (from left to right or from right to left)
+// it should be passed to help command.
\ No newline at end of file