Revert "* Bug #11479 fixed - Under Ubuntu Unity, the color of the text menu was wrong."
[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
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;
38
39 /**
40  * @author Vincent COUVERT
41  */
42 public final class SwingViewMenu {
43
44     private static final int COLORS_COEFF = 255;
45
46     /**
47      * Constructor
48      */
49     private SwingViewMenu() {
50         throw new UnsupportedOperationException();
51     }
52
53     /**
54      * Update the component in the view
55      * @param uimenu the component
56      * @param property the property name
57      * @param value the property value
58      */
59     public static void update(Widget uimenu, int property, Object value) {
60         String uid = ((SwingViewObject) uimenu).getId();
61         switch (property) {
62         case __GO_CALLBACK__ :
63             int cbType = (Integer) GraphicController.getController().getProperty(uid, __GO_CALLBACKTYPE__);
64             uimenu.setCallback(CommonCallBack.createCallback((String) value, cbType, uid));
65             break;
66         case __GO_CALLBACKTYPE__ :
67             String cbString = (String) GraphicController.getController().getProperty(uid, __GO_CALLBACK__);
68             uimenu.setCallback(CommonCallBack.createCallback(cbString, (Integer) value, uid));
69             break;
70         case __GO_UI_CHECKED__ :
71             if (uimenu instanceof SwingScilabCheckBoxMenuItem) {
72                 ((SwingScilabCheckBoxMenuItem) uimenu).setChecked((Boolean) value);
73             }
74             break;
75         case __GO_UI_ENABLE__ :
76             uimenu.setEnabled((Boolean) value);
77             break;
78         case __GO_VISIBLE__ :
79             uimenu.setVisible((Boolean) value);
80             break;
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)));
86             break;
87         case __GO_UI_ICON__ :
88             if (!((String) value).equals("")) {
89                 ((SwingScilabMenuItem) uimenu).setIcon(new ImageIcon(ScilabSwingUtilities.findIcon((String) value, "16x16")));
90             }
91             break;
92         case __GO_UI_LABEL__ :
93             String newText = (String) value;
94             String label = newText;
95
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) == '&') {
99
100                     boolean canBeAMnemonic = true;
101
102                     // Previous char must not be a &
103                     if ((charIndex != 0) && (newText.charAt(charIndex - 1) == '&')) {
104                         canBeAMnemonic = false;
105                     }
106
107                     if (canBeAMnemonic && newText.charAt(charIndex + 1) != '&') {
108                         // A mnemonic
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));
115                         }
116
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;
121                         break;
122                     }
123
124                 }
125             }
126
127             // Set the text after relacing all && (display a & in the label) by &
128             uimenu.setText(label.replaceAll("&&", "&"));
129             break;
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));
138             }
139             break;
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));
148             }
149             break;
150         }
151     }
152 }
153