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 / SplitAction.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 package org.scilab.modules.scinotes.actions;
13
14 import java.beans.PropertyChangeEvent;
15 import java.beans.PropertyChangeListener;
16 import java.awt.event.ActionEvent;
17 import java.awt.event.ActionListener;
18 import java.util.StringTokenizer;
19
20 import javax.swing.ButtonGroup;
21 import javax.swing.JComponent;
22 import javax.swing.JMenu;
23 import javax.swing.JRadioButtonMenuItem;
24 import javax.swing.JSplitPane;
25 import javax.swing.KeyStroke;
26
27 import org.scilab.modules.gui.menu.Menu;
28 import org.scilab.modules.gui.menu.ScilabMenu;
29 import org.scilab.modules.scinotes.SciNotes;
30
31 /**
32  * SplitAction Class
33  * @author Calixte DENIZET
34  */
35 public final class SplitAction extends DefaultAction {
36
37     /**
38      * serialVersionUID
39      */
40     private static final long serialVersionUID = 1L;
41
42     private int state;
43
44     /**
45      * Construtor
46      * @param name the name of the action
47      * @param editor SciNotes
48      */
49     public SplitAction(String name, SciNotes editor) {
50         super(name, editor);
51     }
52
53     /**
54      * doAction
55      */
56     public void doAction() {
57         switch (state) {
58         case 0 :
59             getEditor().removeSplit();
60             return;
61         case 1 :
62             getEditor().splitTab(false);
63             return;
64         default :
65             getEditor().splitTab(true);
66         }
67     }
68
69     /**
70      * createMenu
71      * @param label label of the menu
72      * @param editor SciNotes
73      * @param key KeyStroke
74      * @return createMenu
75      */
76     public static Menu createMenu(String label, final SciNotes editor, KeyStroke key) {
77         StringTokenizer tokens = new StringTokenizer(label, ";");
78         String labelSplitView = tokens.nextToken();
79         String labelOff = tokens.nextToken();
80         String labelH = tokens.nextToken();
81         String labelV = tokens.nextToken();
82
83         SplitAction ln = new SplitAction(labelSplitView, editor);
84         Menu menu = ScilabMenu.createMenu();
85         menu.setText(labelSplitView);
86
87         ButtonGroup group = new ButtonGroup();
88         JRadioButtonMenuItem radio;
89         final JRadioButtonMenuItem[] arr = new JRadioButtonMenuItem[3];
90         String[] labels = new String[]{labelOff, labelH, labelV};
91
92         for (int i = 0; i < 3; i++) {
93             radio = createRadioButtonMenuItem(ln, labels[i], i);
94             group.add(radio);
95             ((JMenu) menu.getAsSimpleMenu()).add(radio);
96             arr[i] = radio;
97         }
98
99         arr[0].setSelected(true);
100
101         ((JMenu) menu.getAsSimpleMenu()).addPropertyChangeListener(new PropertyChangeListener() {
102                 public void propertyChange(PropertyChangeEvent e) {
103                     if (editor.getTextPane() != null) {
104                         JComponent c = editor.getTextPane().getParentComponent();
105                         int state = 0;
106                         if (c instanceof JSplitPane) {
107                             JSplitPane split = (JSplitPane) c;
108                             if (split.getOrientation() == JSplitPane.HORIZONTAL_SPLIT) {
109                                 state = 1;
110                             } else {
111                                 state = 2;
112                             }
113                         }
114                         arr[state].setSelected(true);
115                     }
116                 }
117             });
118
119         return menu;
120     }
121
122     /**
123      * createRadioButtonMenuItem
124      * @param split the SplitAction
125      * @param title the label of the menuitem
126      * @param state the state associated with the menuitem
127      * @return JRadioButtonMenuItem
128      */
129     private static JRadioButtonMenuItem createRadioButtonMenuItem(final SplitAction split, String title, final int state) {
130         JRadioButtonMenuItem radio = new JRadioButtonMenuItem(title);
131         radio.addActionListener(new ActionListener() {
132                 public void actionPerformed(ActionEvent arg0) {
133                     split.state = state;
134                     split.doAction();
135                 }
136             });
137
138         return radio;
139     }
140 }