ZoomAction must work when a block is selected on the palette browser
[scilab.git] / scilab / modules / xcos / src / java / org / scilab / modules / xcos / palette / view / PaletteBlockView.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009 - DIGITEO - Clement DAVID
4  * Copyright (C) 2015 - Marcos CARDINOT
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
11  *
12  */
13
14 package org.scilab.modules.xcos.palette.view;
15
16 import java.awt.Dimension;
17 import java.awt.Font;
18
19 import javax.swing.BorderFactory;
20 import javax.swing.JLabel;
21 import javax.swing.SwingConstants;
22 import javax.swing.border.Border;
23
24 import org.flexdock.plaf.common.border.ShadowBorder;
25 import org.scilab.modules.xcos.palette.PaletteBlockCtrl;
26 import org.scilab.modules.xcos.palette.actions.ZoomAction;
27 import org.scilab.modules.xcos.utils.XcosConstants.PaletteBlockSize;
28
29 /**
30  * The palette block view
31  */
32 @SuppressWarnings(value = { "serial" })
33 public final class PaletteBlockView extends JLabel {
34
35     private static final int DEFAULT_ICON_TEXT_GAP = 5;
36
37     private static final Border SELECTED_BORDER = new ShadowBorder();
38
39     private static final Border NON_SELECTED_BORDER = BorderFactory
40             .createEmptyBorder();
41
42     private PaletteBlockCtrl controller;
43     private PaletteBlockSize palBlockSize;
44
45     /**
46      * Default constructor
47      * @param palBlockSize The PaletteBlockSize
48      * @param controller The associated controller
49      */
50     public PaletteBlockView(PaletteBlockSize palBlockSize, PaletteBlockCtrl controller) {
51         super(controller.getModel().getName(),
52               controller.getModel().getLoadedIcon(palBlockSize.getMaxIconWidth(),
53                                                   palBlockSize.getMaxIconHeight()),
54               SwingConstants.CENTER);
55         this.controller = controller;
56         this.palBlockSize = palBlockSize;
57         ZoomAction.registerKeyAction(getActionMap(), getInputMap());
58         initComponents(palBlockSize);
59     }
60
61     /**
62      * Set up the graphical properties
63      * @param palBlockSize The PaletteBlockSize
64      */
65     public void initComponents(PaletteBlockSize palBlockSize) {
66         // adjust the jlabel size
67         setPreferredSize(palBlockSize.getBlockDimension());
68
69         // adjust the font size
70         setFont(new Font(getFont().getFamily(), 0, palBlockSize.getFontSize()));
71
72         // reloads the icon with the correct size
73         setIcon(controller.getModel().getLoadedIcon(palBlockSize.getMaxIconWidth(),
74                                                     palBlockSize.getMaxIconHeight()));
75
76         setVerticalTextPosition(SwingConstants.BOTTOM);
77         setHorizontalTextPosition(SwingConstants.CENTER);
78         setIconTextGap(DEFAULT_ICON_TEXT_GAP);
79
80         final String text = controller.getModel().getName();
81         setToolTipText(text);
82         setText(text);
83
84         this.palBlockSize = palBlockSize;
85     }
86
87     /**
88      * @return The associated controller
89      */
90     public PaletteBlockCtrl getController() {
91         return controller;
92     }
93
94     /**
95      * @param status
96      *            true To set the UI state selected, false otherwise
97      */
98     public void setSelectedUI(boolean status) {
99         if (status) {
100             setBorder(SELECTED_BORDER);
101         } else {
102             setBorder(NON_SELECTED_BORDER);
103         }
104     }
105
106     /**
107      * Get the paletteBlockSize
108      * @return PaletteBlockSize
109      */
110     public PaletteBlockSize getPaletteBlockSize() {
111         return this.palBlockSize;
112     }
113
114     /**
115      * @return {@link javax.swing.JComponent#getPreferredSize()}
116      * @see javax.swing.JComponent#getMinimumSize()
117      */
118     @Override
119     public Dimension getMinimumSize() {
120         return super.getPreferredSize();
121     }
122 }