Xcos src: Java cleanup
[scilab.git] / scilab / modules / xcos / src / java / org / scilab / modules / xcos / palette / actions / ZoomAction.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2015 - Marcos CARDINOT
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.1-en.txt
10  *
11  */
12
13 package org.scilab.modules.xcos.palette.actions;
14
15 import static org.scilab.modules.commons.OS.MAC;
16
17 import java.awt.Toolkit;
18 import java.awt.event.ActionEvent;
19 import java.awt.event.KeyEvent;
20 import java.lang.reflect.InvocationTargetException;
21
22 import javax.swing.ActionMap;
23 import javax.swing.ImageIcon;
24 import javax.swing.InputMap;
25 import javax.swing.JButton;
26 import javax.swing.KeyStroke;
27
28 import org.scilab.modules.commons.OS;
29 import org.scilab.modules.commons.gui.FindIconHelper;
30 import org.scilab.modules.commons.gui.ScilabLAF;
31 import org.scilab.modules.gui.bridge.menuitem.SwingScilabMenuItem;
32 import org.scilab.modules.gui.events.callback.CommonCallBack;
33 import org.scilab.modules.gui.menuitem.MenuItem;
34 import org.scilab.modules.gui.menuitem.ScilabMenuItem;
35 import org.scilab.modules.xcos.palette.view.PaletteManagerView;
36 import org.scilab.modules.xcos.utils.XcosMessages;
37
38 /**
39  * Zoom Management
40  * @author Marcos CARDINOT <mcardinot@gmail.com>
41  */
42 public class ZoomAction extends CommonCallBack {
43
44     private static final long serialVersionUID = 1L;
45
46     private static final String ICON_ZOOMIN = FindIconHelper.findIcon("zoom-in");
47     private static final String ICON_ZOOMOUT = FindIconHelper.findIcon("zoom-out");
48
49     private static final int ACCELERATOR_KEY = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
50     private static final String ZOOM_IN = "ZoomIn";
51     private static final String ZOOM_OUT = "ZoomOut";
52
53     private static JButton btnZoomIn;
54     private static JButton btnZoomOut;
55     private static MenuItem miZoomIn;
56     private static MenuItem miZoomOut;
57
58     /**
59      * Constructor
60      */
61     public ZoomAction() {
62         super("");
63     }
64
65     /**
66      * Register the key for the action
67      * @param am the ActionMap
68      * @param im the InputMap
69      */
70     public static void registerKeyAction(ActionMap am, InputMap im) {
71         // register the actions to a unique action keyword
72         am.put(ZOOM_IN, new ZoomAction());
73         am.put(ZOOM_OUT, new ZoomAction());
74
75         // add custom key stroke for these action
76         final KeyStroke[] keystrokesIn;
77         final KeyStroke[] keystrokesOut;
78         if (OS.get() == MAC) {
79             // AZERTY for Mac has a non-supported classic layout
80             keystrokesIn = new KeyStroke[] {
81                 KeyStroke.getKeyStroke('/', ACCELERATOR_KEY),
82                 KeyStroke.getKeyStroke('/', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK)
83             };
84             keystrokesOut = new KeyStroke[] {
85                 KeyStroke.getKeyStroke('=', ACCELERATOR_KEY),
86                 KeyStroke.getKeyStroke('=', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK)
87             };
88         } else {
89             keystrokesIn = new KeyStroke[] {
90                 KeyStroke.getKeyStroke('=', ACCELERATOR_KEY),
91                 KeyStroke.getKeyStroke('=', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK),
92                 KeyStroke.getKeyStroke('+', ACCELERATOR_KEY),
93                 KeyStroke.getKeyStroke('+', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK),
94                 KeyStroke.getKeyStroke(KeyEvent.VK_ADD, ACCELERATOR_KEY)
95             };
96             keystrokesOut = new KeyStroke[] {
97                 KeyStroke.getKeyStroke('-', ACCELERATOR_KEY),
98                 KeyStroke.getKeyStroke('-', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK),
99                 KeyStroke.getKeyStroke('_', ACCELERATOR_KEY),
100                 KeyStroke.getKeyStroke('_', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK),
101                 KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT, ACCELERATOR_KEY)
102             };
103         }
104
105         for (KeyStroke k : keystrokesIn) {
106             im.put(k, ZOOM_IN);
107         }
108         for (KeyStroke k : keystrokesOut) {
109             im.put(k, ZOOM_OUT);
110         }
111     }
112
113     /**
114      * Create the button 'zoom in'
115      * @return the button
116      */
117     public static JButton createButtonZoomIn() {
118         btnZoomIn = new JButton();
119         ScilabLAF.setDefaultProperties(btnZoomIn);
120         btnZoomIn.setName(XcosMessages.ZOOM_IN);
121         btnZoomIn.setIcon(new ImageIcon(ICON_ZOOMIN));
122         btnZoomIn.setToolTipText(XcosMessages.ZOOM_IN);
123         btnZoomIn.addActionListener(getCallBack());
124         btnZoomIn.setFocusable(true);
125         setEnabledZoomIn(true);
126         return btnZoomIn;
127     }
128
129     /**
130      * Create the button 'zoom out'
131      * @return the button
132      */
133     public static JButton createButtonZoomOut() {
134         btnZoomOut = new JButton();
135         ScilabLAF.setDefaultProperties(btnZoomOut);
136         btnZoomOut.setName(XcosMessages.ZOOM_OUT);
137         btnZoomOut.setIcon(new ImageIcon(ICON_ZOOMOUT));
138         btnZoomOut.setToolTipText(XcosMessages.ZOOM_OUT);
139         btnZoomOut.addActionListener(getCallBack());
140         btnZoomOut.setFocusable(true);
141         setEnabledZoomOut(true);
142         return btnZoomOut;
143     }
144
145     /**
146      * Creates a menu item associated with the 'zoom in' action
147      * @return the menuitem
148      */
149     public static MenuItem createMenuZoomIn() {
150         miZoomIn = ScilabMenuItem.createMenuItem();
151         miZoomIn.setText(XcosMessages.ZOOM_IN);
152         miZoomIn.setCallback(getCallBack());
153         SwingScilabMenuItem menu = ((SwingScilabMenuItem) miZoomIn.getAsSimpleMenuItem());
154         menu.setIcon(new ImageIcon(ICON_ZOOMIN));
155         menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ADD, ACCELERATOR_KEY));
156         return miZoomIn;
157     }
158
159     /**
160      * Creates a menu item associated with the 'zoom out' action
161      * @return the menuitem
162      */
163     public static MenuItem createMenuZoomOut() {
164         miZoomOut = ScilabMenuItem.createMenuItem();
165         miZoomOut.setText(XcosMessages.ZOOM_OUT);
166         miZoomOut.setCallback(getCallBack());
167         SwingScilabMenuItem menu = ((SwingScilabMenuItem) miZoomOut.getAsSimpleMenuItem());
168         menu.setIcon(new ImageIcon(ICON_ZOOMOUT));
169         menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT, ACCELERATOR_KEY));
170         return miZoomOut;
171     }
172
173     /**
174      * Create a new class instance
175      * @return the instance
176      */
177     private static CommonCallBack getCallBack() {
178         CommonCallBack callback = null;
179         try {
180             callback = ZoomAction.class.getConstructor().newInstance();
181         } catch (IllegalArgumentException e) {
182             e.printStackTrace();
183         } catch (SecurityException e) {
184             e.printStackTrace();
185         } catch (InstantiationException e) {
186             e.printStackTrace();
187         } catch (IllegalAccessException e) {
188             e.printStackTrace();
189         } catch (InvocationTargetException e) {
190             e.printStackTrace();
191         } catch (NoSuchMethodException e) {
192             e.printStackTrace();
193         }
194         return callback;
195     }
196
197     /**
198      * Action
199      * @param e ActionEvent
200      */
201     @Override
202     public void actionPerformed(ActionEvent e) {
203         String cmd = e.getActionCommand();
204         if (cmd.isEmpty()) {
205             cmd = ((JButton) e.getSource()).getName();
206         } else if ((OS.get() == MAC && cmd.equals("=")) || cmd.equals("-") || cmd.equals("_")) {
207             cmd = XcosMessages.ZOOM_OUT;
208         } else if (cmd.equals("/") || cmd.equals("+") || cmd.equals("=")) {
209             cmd = XcosMessages.ZOOM_IN;
210         }
211
212         if (cmd.equals(XcosMessages.ZOOM_IN)) {
213             PaletteManagerView.get().getPanel().zoomIn();
214         } else if (cmd.equals(XcosMessages.ZOOM_OUT)) {
215             PaletteManagerView.get().getPanel().zoomOut();
216         }
217     }
218
219     /**
220      * setEnabled property of the button 'zoomIn'
221      * @param enabled enabled
222      */
223     public static void setEnabledZoomIn(boolean enabled) {
224         btnZoomIn.setEnabled(enabled);
225         miZoomIn.setEnabled(enabled);
226     }
227
228     /**
229      * setEnabled property of the button 'zoomOut'
230      * @param enabled enabled
231      */
232     public static void setEnabledZoomOut(boolean enabled) {
233         btnZoomOut.setEnabled(enabled);
234         miZoomOut.setEnabled(enabled);
235     }
236
237     @Override
238     public void callBack() {
239     }
240 }