Implements the ZoomAction class to perform zoomIn and zoomOut
[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.events.callback.CommonCallBack;
32 import org.scilab.modules.xcos.palette.view.PaletteManagerView;
33 import org.scilab.modules.xcos.utils.XcosMessages;
34
35 /**
36  * Zoom Management
37  * @author Marcos CARDINOT <mcardinot@gmail.com>
38  */
39 public class ZoomAction extends CommonCallBack {
40
41     private static final long serialVersionUID = 1L;
42     
43     private static final String LABEL_ZOOMIN = XcosMessages.ZOOM_IN;
44     private static final String LABEL_ZOOMOUT = XcosMessages.ZOOM_OUT;
45     private static final String ICON_ZOOMIN = FindIconHelper.findIcon("zoom-in");
46     private static final String ICON_ZOOMOUT = FindIconHelper.findIcon("zoom-out");
47
48     private static final int ACCELERATOR_KEY = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
49     private static final String ZOOM_IN = "ZoomIn";
50     private static final String ZOOM_OUT = "ZoomOut";
51
52     private static JButton btnZoomIn;
53     private static JButton btnZoomOut;
54
55     /**
56      * Constructor
57      */
58     public ZoomAction() {
59         super("");
60     }
61
62     /**
63      * Register the key for the action
64      * @param view PaletteManagerPanel instance
65      */
66     public static void registerKeyAction(PaletteManagerView view) {
67         // Multi-shortcut action
68         ActionMap[] ams = new ActionMap[] {
69                 view.getTree().getActionMap(),
70                 view.getPanel().getActionMap()
71         };
72         InputMap[] maps = new InputMap[] {
73                 view.getTree().getInputMap(),
74                 view.getPanel().getInputMap()
75         };
76
77         // register the action to a unique action keyword
78         for (ActionMap am : ams) {
79             am.put(ZOOM_IN, new ZoomAction());
80             am.put(ZOOM_OUT, new ZoomAction());
81         }
82
83         // add custom key stroke for this action
84         final KeyStroke[] keystrokesIn;
85         final KeyStroke[] keystrokesOut;
86         if (OS.get() == MAC) {
87             // AZERTY for Mac has a non-supported classic layout
88             keystrokesIn = new KeyStroke[] {
89                 KeyStroke.getKeyStroke('/', ACCELERATOR_KEY),
90                 KeyStroke.getKeyStroke('/', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK)
91             };
92             keystrokesOut = new KeyStroke[] {
93                     KeyStroke.getKeyStroke('=', ACCELERATOR_KEY),
94                     KeyStroke.getKeyStroke('=', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK)
95             };
96         } else {
97             keystrokesIn = new KeyStroke[] {
98                 KeyStroke.getKeyStroke('=', ACCELERATOR_KEY),
99                 KeyStroke.getKeyStroke('=', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK),
100                 KeyStroke.getKeyStroke('+', ACCELERATOR_KEY),
101                 KeyStroke.getKeyStroke('+', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK),
102                 KeyStroke.getKeyStroke(KeyEvent.VK_ADD, ACCELERATOR_KEY)
103             };
104             keystrokesOut = new KeyStroke[] {
105                 KeyStroke.getKeyStroke('-', ACCELERATOR_KEY),
106                 KeyStroke.getKeyStroke('-', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK),
107                 KeyStroke.getKeyStroke('_', ACCELERATOR_KEY),
108                 KeyStroke.getKeyStroke('_', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK),
109                 KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT, ACCELERATOR_KEY)
110             };
111         }
112
113         for (InputMap map : maps) {
114             for (KeyStroke k : keystrokesIn) {
115                 map.put(k, ZOOM_IN);
116             }
117             for (KeyStroke k : keystrokesOut) {
118                 map.put(k, ZOOM_OUT);
119             }
120         }
121     }
122
123     /**
124      * Create the button 'zoom in'
125      * @return the button
126      */
127     public static JButton createButtonZoomIn() {
128         btnZoomIn = new JButton();
129         ScilabLAF.setDefaultProperties(btnZoomIn);
130         btnZoomIn.setIcon(new ImageIcon(ICON_ZOOMIN));
131         btnZoomIn.setToolTipText(LABEL_ZOOMIN);
132         btnZoomIn.addActionListener(getCallBack());
133         setEnabledZoomIn(true);
134         return btnZoomIn;
135     }
136
137     /**
138      * Create the button 'zoom out'
139      * @return the button
140      */
141     public static JButton createButtonZoomOut() {
142         btnZoomOut = new JButton();
143         ScilabLAF.setDefaultProperties(btnZoomOut);
144         btnZoomOut.setIcon(new ImageIcon(ICON_ZOOMOUT));
145         btnZoomOut.setToolTipText(LABEL_ZOOMOUT);
146         btnZoomOut.addActionListener(getCallBack());
147         setEnabledZoomOut(true);
148         return btnZoomOut;
149     }
150
151     /**
152      * Create a new class instance
153      * @return the instance
154      */
155     private static CommonCallBack getCallBack() {
156         CommonCallBack callback = null;
157         try {
158             callback = ZoomAction.class.getConstructor().newInstance();
159         } catch (IllegalArgumentException e) {
160             e.printStackTrace();
161         } catch (SecurityException e) {
162             e.printStackTrace();
163         } catch (InstantiationException e) {
164             e.printStackTrace();
165         } catch (IllegalAccessException e) {
166             e.printStackTrace();
167         } catch (InvocationTargetException e) {
168             e.printStackTrace();
169         } catch (NoSuchMethodException e) {
170             e.printStackTrace();
171         }
172         return callback;
173     }
174
175     /**
176      * Action
177      * @param e ActionEvent
178      */
179     public void actionPerformed(ActionEvent e) {
180         String cmd = e.getActionCommand();
181         if (cmd.isEmpty()) {
182             Object src = e.getSource();
183             if (btnZoomIn != null && src.equals(btnZoomIn)) {
184                 PaletteManagerView.get().getPanel().zoomIn();
185             } else if (btnZoomOut != null && src.equals(btnZoomOut)) {
186                 PaletteManagerView.get().getPanel().zoomOut();
187             }
188         } else if (OS.get() == MAC) {
189             if (cmd.equals("/")) {
190                 PaletteManagerView.get().getPanel().zoomIn();
191             } else if (cmd.equals("=")) {
192                 PaletteManagerView.get().getPanel().zoomOut();
193             }
194         } else {
195             if (cmd.equals("+") || cmd.equals("=")) {
196                 PaletteManagerView.get().getPanel().zoomIn();
197             } else if (cmd.equals("-") || cmd.equals("_")) {
198                 PaletteManagerView.get().getPanel().zoomOut();
199             }
200         }
201     }
202
203     /**
204      * setEnabled property of the button 'zoomIn'
205      * @param enabled enabled 
206      */
207     public static void setEnabledZoomIn(boolean enabled) {
208         btnZoomIn.setEnabled(enabled);
209     }
210
211     /**
212      * setEnabled property of the button 'zoomOut'
213      * @param enabled enabled 
214      */
215     public static void setEnabledZoomOut(boolean enabled) {
216         btnZoomOut.setEnabled(enabled);
217     }
218
219     @Override
220     public void callBack() {
221     }
222 }