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 / OpenURLAction.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - Calixte DENIZET
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 package org.scilab.modules.scinotes.actions;
14
15 import java.beans.PropertyChangeEvent;
16 import java.beans.PropertyChangeListener;
17 import javax.swing.JMenuItem;
18 import javax.swing.KeyStroke;
19 import javax.swing.text.BadLocationException;
20
21 import org.scilab.modules.gui.menuitem.MenuItem;
22 import org.scilab.modules.gui.utils.WebBrowser;
23 import org.scilab.modules.scinotes.SciNotes;
24 import org.scilab.modules.scinotes.ScilabDocument;
25 import org.scilab.modules.scinotes.ScilabLexerConstants;
26 import org.scilab.modules.scinotes.ScilabEditorPane;
27 import org.scilab.modules.scinotes.KeywordEvent;
28
29 /**
30  * OpenURLAction Class
31  * @author Calixte DENIZET
32  */
33 public class OpenURLAction extends DefaultAction {
34
35     /**
36      * Constructor
37      * @param name the name of the action
38      * @param editor SciNotes
39      */
40     public OpenURLAction(String name, SciNotes editor) {
41         super(name, editor);
42     }
43
44     /**
45      * doAction
46      */
47     public void doAction() {
48         ScilabEditorPane sep = (ScilabEditorPane) getEditor().getTextPane();
49         KeywordEvent kwe = sep.getKeywordEvent(sep.getSelectionEnd());
50         if (ScilabLexerConstants.URL == kwe.getType() || ScilabLexerConstants.MAIL == kwe.getType()) {
51             try {
52                 ScilabDocument doc = (ScilabDocument) sep.getDocument();
53                 String url = doc.getText(kwe.getStart(), kwe.getLength());
54                 WebBrowser.openUrl(url);
55             } catch (BadLocationException e) { }
56         }
57     }
58
59     /**
60      * createMenu
61      * @param label label of the menu
62      * @param editor SciNotes
63      * @param key Keystroke
64      * @return MenuItem
65      */
66     public static MenuItem createMenu(String label, final SciNotes editor, KeyStroke key) {
67         final MenuItem menuitem = createMenu(label, null, new OpenURLAction(label, editor), key);
68         ((JMenuItem) menuitem.getAsSimpleMenuItem()).addPropertyChangeListener(new PropertyChangeListener() {
69                 public void propertyChange(PropertyChangeEvent e) {
70                     if (editor.getTextPane() != null) {
71                         String keyword = editor.getTextPane().getSelectedText();
72                         if (keyword == null) {
73                             KeywordEvent kwe = editor.getTextPane().getKeywordEvent();
74                             menuitem.setEnabled(ScilabLexerConstants.MAIL == kwe.getType() || ScilabLexerConstants.URL == kwe.getType());
75                         }
76                     }
77                 }
78             });
79
80         return menuitem;
81     }
82 }