Refactorization of the management of the actions in menus, button, shortcuts
[scilab.git] / scilab / modules / scinotes / src / java / org / scilab / modules / scinotes / actions / IndentAction.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009 - DIGITEO - Bruno JOFRET
4  * Copyright (C) 2010 - Calixte DENIZET
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 package org.scilab.modules.scinotes.actions;
15
16 import javax.swing.KeyStroke;
17 import org.scilab.modules.gui.menuitem.MenuItem;
18 import org.scilab.modules.scinotes.SciNotes;
19 import org.scilab.modules.scinotes.ScilabEditorPane;
20 import org.scilab.modules.scinotes.ScilabDocument;
21 import org.scilab.modules.scinotes.IndentManager;
22
23 /**
24  * IndentAction Class
25  * @author Bruno JOFRET
26  * @author Calixte DENIZET
27  *
28  */
29 @SuppressWarnings("serial")
30 public final class IndentAction extends DefaultAction {
31
32     /**
33      * Constructor
34      * @param name the name of the action
35      * @param editor SciNotes
36      */
37     public IndentAction(String name, SciNotes editor) {
38         super(name, editor);
39     }
40
41     /**
42      * doAction
43      */
44     public void doAction() {
45         ScilabEditorPane sep = (ScilabEditorPane) getEditor().getTextPane();
46         int start = sep.getSelectionStart();
47         int end = sep.getSelectionEnd();
48         IndentManager indent = sep.getIndentManager();
49         ScilabDocument doc = (ScilabDocument) sep.getDocument();
50         int[] ret = new int[2];
51
52         doc.mergeEditsBegin();
53         if (start == end) {
54             ret = indent.indentDoc(start, end);
55             if (ret != null) {
56                 sep.setCaretPosition(ret[0]);
57             }
58         } else {
59             ret = indent.indentDoc(start, end - 1);
60             if (ret != null) {
61                 sep.setSelectionStart(ret[0]);
62                 sep.setSelectionEnd(ret[1]);
63             }
64         }
65         doc.mergeEditsEnd();
66     }
67
68     /**
69      * createMenu
70      * @param label label of the menu
71      * @param editor SciNotes
72      * @param key KeyStroke
73      * @return MenuItem
74      */
75     public static MenuItem createMenu(String label, SciNotes editor, KeyStroke key) {
76         return createMenu(label, null, new IndentAction(label, editor), key);
77     }
78 }