2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2015 - Marcos CARDINOT
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
13 package org.scilab.modules.xcos.palette.actions;
15 import static org.scilab.modules.commons.OS.MAC;
17 import java.awt.Toolkit;
18 import java.awt.event.ActionEvent;
19 import java.awt.event.KeyEvent;
20 import java.lang.reflect.InvocationTargetException;
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;
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;
40 * @author Marcos CARDINOT <mcardinot@gmail.com>
42 public class ZoomAction extends CommonCallBack {
44 private static final long serialVersionUID = 1L;
46 private static final String ICON_ZOOMIN = FindIconHelper.findIcon("zoom-in");
47 private static final String ICON_ZOOMOUT = FindIconHelper.findIcon("zoom-out");
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";
53 private static JButton btnZoomIn;
54 private static JButton btnZoomOut;
55 private static MenuItem miZoomIn;
56 private static MenuItem miZoomOut;
66 * Register the key for the action
67 * @param am the ActionMap
68 * @param im the InputMap
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());
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)
84 keystrokesOut = new KeyStroke[] {
85 KeyStroke.getKeyStroke('=', ACCELERATOR_KEY),
86 KeyStroke.getKeyStroke('=', ACCELERATOR_KEY | KeyEvent.SHIFT_DOWN_MASK)
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)
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)
105 for (KeyStroke k : keystrokesIn) {
108 for (KeyStroke k : keystrokesOut) {
114 * Create the button 'zoom in'
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);
130 * Create the button 'zoom out'
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);
146 * Creates a menu item associated with the 'zoom in' action
147 * @return the menuitem
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));
160 * Creates a menu item associated with the 'zoom out' action
161 * @return the menuitem
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));
174 * Create a new class instance
175 * @return the instance
177 private static CommonCallBack getCallBack() {
178 CommonCallBack callback = null;
180 callback = ZoomAction.class.getConstructor().newInstance();
181 } catch (IllegalArgumentException e) {
183 } catch (SecurityException e) {
185 } catch (InstantiationException e) {
187 } catch (IllegalAccessException e) {
189 } catch (InvocationTargetException e) {
191 } catch (NoSuchMethodException e) {
199 * @param e ActionEvent
201 public void actionPerformed(ActionEvent e) {
202 String cmd = e.getActionCommand();
204 cmd = ((JButton) e.getSource()).getName();
205 } else if ((OS.get() == MAC && cmd.equals("=")) || cmd.equals("-") || cmd.equals("_")) {
206 cmd = XcosMessages.ZOOM_OUT;
207 } else if (cmd.equals("/") || cmd.equals("+") || cmd.equals("=")) {
208 cmd = XcosMessages.ZOOM_IN;
211 if (cmd.equals(XcosMessages.ZOOM_IN)) {
212 PaletteManagerView.get().getPanel().zoomIn();
213 } else if (cmd.equals(XcosMessages.ZOOM_OUT)) {
214 PaletteManagerView.get().getPanel().zoomOut();
219 * setEnabled property of the button 'zoomIn'
220 * @param enabled enabled
222 public static void setEnabledZoomIn(boolean enabled) {
223 btnZoomIn.setEnabled(enabled);
224 miZoomIn.setEnabled(enabled);
228 * setEnabled property of the button 'zoomOut'
229 * @param enabled enabled
231 public static void setEnabledZoomOut(boolean enabled) {
232 btnZoomOut.setEnabled(enabled);
233 miZoomOut.setEnabled(enabled);
237 public void callBack() {