2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2010 - DIGITEO - Clement DAVID
4 * Copyright (C) 2011 - Scilab Enterprises - Clement DAVID
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
14 package org.scilab.modules.xcos.palette.view;
16 import java.util.List;
17 import java.util.ListIterator;
19 import javax.swing.JScrollPane;
20 import javax.swing.JTree;
21 import javax.swing.tree.DefaultTreeModel;
22 import javax.swing.tree.TreeNode;
23 import javax.swing.tree.TreePath;
25 import org.scilab.modules.gui.bridge.tab.SwingScilabDockablePanel;
26 import org.scilab.modules.gui.bridge.toolbar.SwingScilabToolBar;
27 import org.scilab.modules.gui.bridge.window.SwingScilabWindow;
28 import org.scilab.modules.gui.menu.Menu;
29 import org.scilab.modules.gui.menu.ScilabMenu;
30 import org.scilab.modules.gui.menubar.MenuBar;
31 import org.scilab.modules.gui.menubar.ScilabMenuBar;
32 import org.scilab.modules.gui.tab.SimpleTab;
33 import org.scilab.modules.gui.tabfactory.ScilabTabFactory;
34 import org.scilab.modules.gui.textbox.ScilabTextBox;
35 import org.scilab.modules.gui.toolbar.ScilabToolBar;
36 import org.scilab.modules.gui.toolbar.ToolBar;
37 import org.scilab.modules.gui.utils.ClosingOperationsManager;
38 import org.scilab.modules.gui.utils.WindowsConfigurationManager;
39 import org.scilab.modules.xcos.Xcos;
40 import org.scilab.modules.xcos.palette.PaletteManager;
41 import org.scilab.modules.xcos.palette.actions.ClosePalettesAction;
42 import org.scilab.modules.xcos.palette.actions.LoadAsPalAction;
43 import org.scilab.modules.xcos.palette.actions.NavigationAction;
44 import org.scilab.modules.xcos.palette.actions.ZoomAction;
45 import org.scilab.modules.xcos.utils.XcosMessages;
48 * Implement the default view for the palette
50 @SuppressWarnings(value = { "serial" })
51 public class PaletteManagerView extends SwingScilabDockablePanel implements SimpleTab {
52 public static final String DEFAULT_WIN_UUID = "xcos-palette-default-window";
53 public static final String DEFAULT_TAB_UUID = PaletteManager.MODEL_CLASS_PACKAGE;
55 private final PaletteManager controller;
56 private PaletteManagerPanel panel;
62 * the associated controller
64 private PaletteManagerView(final PaletteManager controller) {
65 super(XcosMessages.PALETTE_BROWSER + " - " + Xcos.TRADENAME,
68 this.controller = controller;
69 setWindowIcon(Xcos.ICON.getImage());
74 private static class ClosingOperation
76 org.scilab.modules.gui.utils.ClosingOperationsManager.ClosingOperation {
78 public ClosingOperation() {
82 public int canClose() {
87 public void destroy() {
88 PaletteManager.getInstance().firePropertyChange("visible", true, false);
92 public String askForClosing(List<SwingScilabDockablePanel> list) {
97 public void updateDependencies(List<SwingScilabDockablePanel> list,
98 ListIterator<SwingScilabDockablePanel> it) {
103 * Static API for Tabs
106 public static PaletteManagerView get() {
107 return (PaletteManagerView) ScilabTabFactory.getInstance()
108 .getFromCache(DEFAULT_TAB_UUID);
111 public static void restore(Void v) {
115 public static void restore(Void v, final boolean visible) {
116 PaletteManagerView tab = new PaletteManagerView(
117 PaletteManager.getInstance());
119 tab.createDefaultWindow().setVisible(true);
121 PaletteManager.getInstance().firePropertyChange("visible", false, true);
123 ClosingOperationsManager.addDependencyWithRoot((SwingScilabDockablePanel) tab);
124 ClosingOperationsManager.registerClosingOperation((SwingScilabDockablePanel) tab,
125 new ClosingOperation());
126 ScilabTabFactory.getInstance().addToCache(tab);
130 * @return the controller
132 protected PaletteManager getController() {
139 public PaletteManagerPanel getPanel() {
147 public void setPanel(final PaletteManagerPanel panel) {
151 /** Instantiate and setup all the components */
152 private void initComponents() {
153 /* Create the content pane */
154 panel = new PaletteManagerPanel(getController());
155 setContentPane(panel);
157 /* Create the menu bar */
158 final MenuBar menuBar = ScilabMenuBar.createMenuBar();
160 final Menu menu = ScilabMenu.createMenu();
161 menu.setText(XcosMessages.PALETTES);
162 menu.setMnemonic('P');
165 menu.add(LoadAsPalAction.createMenu(null));
167 menu.add(ClosePalettesAction.createMenu(null));
171 /* Create the toolbar */
172 final ToolBar toolbar = ScilabToolBar.createToolBar();
173 SwingScilabToolBar stb = (SwingScilabToolBar) toolbar.getAsSimpleToolBar();
175 stb.add(LoadAsPalAction.createButton(null));
179 stb.add(NavigationAction.createButtonPrev());
180 stb.add(NavigationAction.createButtonNext());
184 stb.add(ZoomAction.createButtonZoomIn());
185 stb.add(ZoomAction.createButtonZoomOut());
186 ZoomAction.registerKeyAction(getPanel().getActionMap(), getPanel().getInputMap());
187 ZoomAction.registerKeyAction(getTree().getActionMap(), getTree().getInputMap());
191 /* Create the infobar */
192 setInfoBar(ScilabTextBox.createTextBox());
194 setCallback(new ClosePalettesAction(null));
195 getTree().revalidate();
196 getPanel().performStartUpLayout();
199 /** @return the category tree */
200 public JTree getTree() {
201 return (JTree) ((JScrollPane) panel.getLeftComponent()).getViewport()
206 * Update the selected path on the tree
208 public static void updateTree() {
212 final JTree t = get().getTree();
213 final TreePath p = t.getSelectionPath();
218 ((DefaultTreeModel) t.getModel()).reload((TreeNode) p
219 .getLastPathComponent());
220 t.setSelectionPath(p);
225 * Update the whole tree
227 public static void updateWholeTree() {
231 final JTree t = get().getTree();
233 final TreePath selectedPath = t.getSelectionPath();
234 ((DefaultTreeModel) t.getModel()).reload();
235 t.setSelectionPath(selectedPath);
240 * the information to write on the infobar
242 public void setInfo(final String info) {
243 getInfoBar().setText(info);
246 private SwingScilabWindow createDefaultWindow() {
247 final SwingScilabWindow win;
249 final SwingScilabWindow configuration = WindowsConfigurationManager.createWindow(
250 DEFAULT_WIN_UUID, false);
251 if (configuration != null) {
254 win = SwingScilabWindow.createWindow(true);