2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
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
13 package org.scilab.modules.gui;
15 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_CALLBACKTYPE__;
16 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_CALLBACK__;
17 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_ACCELERATOR__;
18 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_CHECKED__;
19 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_ENABLE__;
20 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FOREGROUNDCOLOR__;
21 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_ICON__;
22 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LABEL__;
23 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_MNEMONIC__;
24 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_VISIBLE__;
26 import java.awt.Color;
28 import javax.swing.ImageIcon;
30 import org.scilab.modules.commons.gui.ScilabKeyStroke;
31 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
32 import org.scilab.modules.gui.bridge.checkboxmenuitem.SwingScilabCheckBoxMenuItem;
33 import org.scilab.modules.gui.bridge.menu.SwingScilabMenu;
34 import org.scilab.modules.gui.bridge.menuitem.SwingScilabMenuItem;
35 import org.scilab.modules.gui.events.callback.CommonCallBack;
36 import org.scilab.modules.gui.utils.ScilabSwingUtilities;
37 import org.scilab.modules.gui.widget.Widget;
40 * @author Vincent COUVERT
42 public final class SwingViewMenu {
44 private static final int COLORS_COEFF = 255;
49 private SwingViewMenu() {
50 throw new UnsupportedOperationException();
54 * Update the component in the view
55 * @param uimenu the component
56 * @param property the property name
57 * @param value the property value
59 public static void update(Widget uimenu, int property, Object value) {
60 String uid = ((SwingViewObject) uimenu).getId();
62 case __GO_CALLBACK__ :
63 int cbType = (Integer) GraphicController.getController().getProperty(uid, __GO_CALLBACKTYPE__);
64 uimenu.setCallback(CommonCallBack.createCallback((String) value, cbType, uid));
66 case __GO_CALLBACKTYPE__ :
67 String cbString = (String) GraphicController.getController().getProperty(uid, __GO_CALLBACK__);
68 uimenu.setCallback(CommonCallBack.createCallback(cbString, (Integer) value, uid));
70 case __GO_UI_CHECKED__ :
71 if (uimenu instanceof SwingScilabCheckBoxMenuItem) {
72 ((SwingScilabCheckBoxMenuItem) uimenu).setChecked((Boolean) value);
75 case __GO_UI_ENABLE__ :
76 uimenu.setEnabled((Boolean) value);
79 uimenu.setVisible((Boolean) value);
81 case __GO_UI_FOREGROUNDCOLOR__ :
82 Double[] allColors = ((Double[]) value);
83 uimenu.setForeground(new Color((int) (allColors[0] * COLORS_COEFF),
84 (int) (allColors[1] * COLORS_COEFF),
85 (int) (allColors[2] * COLORS_COEFF)));
88 if (!((String) value).equals("")) {
89 ((SwingScilabMenuItem) uimenu).setIcon(new ImageIcon(ScilabSwingUtilities.findIcon((String) value, "16x16")));
92 case __GO_UI_LABEL__ :
93 String newText = (String) value;
94 String label = newText;
96 // Try to set a mnemonic according to text (character preeceded by a &)
97 for (int charIndex = 0; charIndex < newText.length(); charIndex++) {
98 if (newText.charAt(charIndex) == '&') {
100 boolean canBeAMnemonic = true;
102 // Previous char must not be a &
103 if ((charIndex != 0) && (newText.charAt(charIndex - 1) == '&')) {
104 canBeAMnemonic = false;
107 if (canBeAMnemonic && newText.charAt(charIndex + 1) != '&') {
109 if (uimenu instanceof SwingScilabCheckBoxMenuItem) {
110 ((SwingScilabCheckBoxMenuItem) uimenu).setMnemonic(newText.charAt(charIndex + 1));
111 } else if (uimenu instanceof SwingScilabMenuItem) {
112 ((SwingScilabMenuItem) uimenu).setMnemonic(newText.charAt(charIndex + 1));
113 } else if (uimenu instanceof SwingScilabMenu) {
114 ((SwingScilabMenu) uimenu).setMnemonic(newText.charAt(charIndex + 1));
117 // Have to remove the & used to set a Mnemonic
118 String firstPart = newText.substring(0, Math.max(charIndex, 0)); // Before &
119 String secondPart = newText.substring(Math.min(charIndex + 1, newText.length()), newText.length()); // After &
120 label = firstPart + secondPart;
127 // Set the text after relacing all && (display a & in the label) by &
128 uimenu.setText(label.replaceAll("&&", "&"));
130 case __GO_UI_MNEMONIC__ :
131 String mnemonic = (String) value;
132 if (uimenu instanceof SwingScilabCheckBoxMenuItem) {
133 ((SwingScilabCheckBoxMenuItem) uimenu).setMnemonic(mnemonic.charAt(0));
134 } else if (uimenu instanceof SwingScilabMenuItem) {
135 ((SwingScilabMenuItem) uimenu).setMnemonic(mnemonic.charAt(0));
136 } else if (uimenu instanceof SwingScilabMenu) {
137 ((SwingScilabMenu) uimenu).setMnemonic(mnemonic.charAt(0));
140 case __GO_UI_ACCELERATOR__ :
141 String accelerator = (String) value;
142 if (uimenu instanceof SwingScilabCheckBoxMenuItem) {
143 ((SwingScilabCheckBoxMenuItem) uimenu).setAccelerator(ScilabKeyStroke.getKeyStroke(accelerator));
144 } else if (uimenu instanceof SwingScilabMenuItem) {
145 ((SwingScilabMenuItem) uimenu).setAccelerator(ScilabKeyStroke.getKeyStroke(accelerator));
146 } else if (uimenu instanceof SwingScilabMenu) {
147 ((SwingScilabMenu) uimenu).setAccelerator(ScilabKeyStroke.getKeyStroke(accelerator));