eaaa5a810d7dd8fda5f861efcbb8b24f2658fa16
[scilab.git] / scilab / modules / gui / src / java / org / scilab / modules / gui / SwingViewMenu.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
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
13 package org.scilab.modules.gui;
14
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__;
25
26 import java.awt.Color;
27
28 import javax.swing.ImageIcon;
29 import javax.swing.UIManager;
30
31 import org.scilab.modules.commons.gui.ScilabKeyStroke;
32 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
33 import org.scilab.modules.gui.bridge.checkboxmenuitem.SwingScilabCheckBoxMenuItem;
34 import org.scilab.modules.gui.bridge.menu.SwingScilabMenu;
35 import org.scilab.modules.gui.bridge.menuitem.SwingScilabMenuItem;
36 import org.scilab.modules.gui.events.callback.CommonCallBack;
37 import org.scilab.modules.gui.utils.ScilabSwingUtilities;
38 import org.scilab.modules.gui.widget.Widget;
39
40 /**
41  * @author Vincent COUVERT
42  */
43 public final class SwingViewMenu {
44
45     private static final int COLORS_COEFF = 255;
46
47     /**
48      * Constructor
49      */
50     private SwingViewMenu() {
51         throw new UnsupportedOperationException();
52     }
53
54     /**
55      * Update the component in the view
56      * @param uimenu the component
57      * @param property the property name
58      * @param value the property value
59      */
60     public static void update(Widget uimenu, int property, Object value) {
61         String uid = ((SwingViewObject) uimenu).getId();
62         switch (property) {
63         case __GO_CALLBACK__ :
64             int cbType = (Integer) GraphicController.getController().getProperty(uid, __GO_CALLBACKTYPE__);
65             uimenu.setCallback(CommonCallBack.createCallback((String) value, cbType, uid));
66             break;
67         case __GO_CALLBACKTYPE__ :
68             String cbString = (String) GraphicController.getController().getProperty(uid, __GO_CALLBACK__);
69             uimenu.setCallback(CommonCallBack.createCallback(cbString, (Integer) value, uid));
70             break;
71         case __GO_UI_CHECKED__ :
72             if (uimenu instanceof SwingScilabCheckBoxMenuItem) {
73                 ((SwingScilabCheckBoxMenuItem) uimenu).setChecked((Boolean) value);
74             }
75             break;
76         case __GO_UI_ENABLE__ :
77             uimenu.setEnabled((Boolean) value);
78             break;
79         case __GO_VISIBLE__ :
80             uimenu.setVisible((Boolean) value);
81             break;
82         case __GO_UI_FOREGROUNDCOLOR__ :
83             uimenu.setForeground(UIManager.getColor("MenuBar.foreground"));
84             break;
85         case __GO_UI_ICON__ :
86             if (!((String) value).equals("")) {
87                 ((SwingScilabMenuItem) uimenu).setIcon(new ImageIcon(ScilabSwingUtilities.findIcon((String) value, "16x16")));
88             }
89             break;
90         case __GO_UI_LABEL__ :
91             String newText = (String) value;
92             String label = newText;
93
94             // Try to set a mnemonic according to text (character preeceded by a &)
95             for (int charIndex = 0; charIndex < newText.length(); charIndex++) {
96                 if (newText.charAt(charIndex) == '&') {
97
98                     boolean canBeAMnemonic = true;
99
100                     // Previous char must not be a &
101                     if ((charIndex != 0) && (newText.charAt(charIndex - 1) == '&')) {
102                         canBeAMnemonic = false;
103                     }
104
105                     if (canBeAMnemonic && newText.charAt(charIndex + 1) != '&') {
106                         // A mnemonic
107                         if (uimenu instanceof SwingScilabCheckBoxMenuItem) {
108                             ((SwingScilabCheckBoxMenuItem) uimenu).setMnemonic(newText.charAt(charIndex + 1));
109                         } else if (uimenu instanceof SwingScilabMenuItem) {
110                             ((SwingScilabMenuItem) uimenu).setMnemonic(newText.charAt(charIndex + 1));
111                         } else if (uimenu instanceof SwingScilabMenu) {
112                             ((SwingScilabMenu) uimenu).setMnemonic(newText.charAt(charIndex + 1));
113                         }
114
115                         // Have to remove the & used to set a Mnemonic
116                         String firstPart = newText.substring(0, Math.max(charIndex, 0)); // Before &
117                         String secondPart = newText.substring(Math.min(charIndex + 1, newText.length()), newText.length()); // After &
118                         label = firstPart + secondPart;
119                         break;
120                     }
121
122                 }
123             }
124
125             // Set the text after relacing all && (display a & in the label) by &
126             uimenu.setText(label.replaceAll("&&", "&"));
127             break;
128         case __GO_UI_MNEMONIC__ :
129             String mnemonic = (String) value;
130             if (uimenu instanceof SwingScilabCheckBoxMenuItem) {
131                 ((SwingScilabCheckBoxMenuItem) uimenu).setMnemonic(mnemonic.charAt(0));
132             } else if (uimenu instanceof SwingScilabMenuItem) {
133                 ((SwingScilabMenuItem) uimenu).setMnemonic(mnemonic.charAt(0));
134             } else if (uimenu instanceof SwingScilabMenu) {
135                 ((SwingScilabMenu) uimenu).setMnemonic(mnemonic.charAt(0));
136             }
137             break;
138         case __GO_UI_ACCELERATOR__ :
139             String accelerator = (String) value;
140             if (uimenu instanceof SwingScilabCheckBoxMenuItem) {
141                 ((SwingScilabCheckBoxMenuItem) uimenu).setAccelerator(ScilabKeyStroke.getKeyStroke(accelerator));
142             } else if (uimenu instanceof SwingScilabMenuItem) {
143                 ((SwingScilabMenuItem) uimenu).setAccelerator(ScilabKeyStroke.getKeyStroke(accelerator));
144             } else if (uimenu instanceof SwingScilabMenu) {
145                 ((SwingScilabMenu) uimenu).setAccelerator(ScilabKeyStroke.getKeyStroke(accelerator));
146             }
147             break;
148         }
149     }
150 }
151