Bug fix #11530 & #11363: Raise (help, scinotes...) windows when iconified
[scilab.git] / scilab / modules / ui_data / src / java / org / scilab / modules / ui_data / variablebrowser / ScilabVariableBrowser.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - DIGITEO - Bruno JOFRET
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15 package org.scilab.modules.ui_data.variablebrowser;
16
17 import javax.swing.SwingUtilities;
18
19 import org.scilab.modules.gui.bridge.tab.SwingScilabDockablePanel;
20 import org.scilab.modules.gui.bridge.window.SwingScilabWindow;
21 import org.scilab.modules.gui.tabfactory.ScilabTabFactory;
22 import org.scilab.modules.gui.textbox.ScilabTextBox;
23 import org.scilab.modules.gui.textbox.TextBox;
24 import org.scilab.modules.gui.utils.ClosingOperationsManager;
25 import org.scilab.modules.gui.utils.WindowsConfigurationManager;
26 import org.scilab.modules.gui.window.ScilabWindow;
27 import org.scilab.modules.ui_data.BrowseVar;
28 import org.scilab.modules.ui_data.tabfactory.VariableBrowserTab;
29 import org.scilab.modules.ui_data.tabfactory.VariableBrowserTabFactory;
30 import org.scilab.modules.ui_data.utils.UiDataMessages;
31
32 /**
33  *
34  * Class ScilabVariableBrowser
35  * Implements a ScilabWindow containing Variable Browser (JTable)
36  *
37  */
38 public final class ScilabVariableBrowser implements VariableBrowser {
39
40     private static ScilabVariableBrowser instance;
41     private static SwingScilabVariableBrowser browserTab;
42
43     static {
44         ScilabTabFactory.getInstance().addTabFactory(VariableBrowserTabFactory.getInstance());
45     }
46
47     /**
48      * Constructor
49      * @param columnNames the columns title.
50      */
51     private ScilabVariableBrowser() {
52         TextBox infobar = ScilabTextBox.createTextBox();
53         browserTab = new SwingScilabVariableBrowser(BrowseVar.COLUMNNAMES, BrowseVar.COLUMNSALIGNMENT);
54         browserTab.addInfoBar(infobar);
55         browserTab.setTitle(UiDataMessages.VARIABLE_BROWSER);
56     }
57
58     public static SwingScilabVariableBrowser createVarBrowserTab() {
59         if (instance == null) {
60             instance = new ScilabVariableBrowser();
61         }
62
63         return browserTab;
64     }
65
66     /**
67      * @return true if an instance of BrowseVar already exists.
68      */
69     public static boolean isBrowseVarOpened() {
70         return instance != null;
71     }
72
73     /**
74      * Opens Variable Browser
75      * @return the Variable Browser
76      */
77     public static VariableBrowser openVariableBrowser() {
78         if (instance == null) {
79             boolean success = WindowsConfigurationManager.restoreUUID(SwingScilabVariableBrowser.VARBROWSERUUID);
80             if (!success) {
81                 VariableBrowserTab.getVariableBrowserInstance();
82                 SwingScilabWindow window = SwingScilabWindow.createWindow(true);
83                 window.addTab(browserTab);
84                 window.setLocation(0, 0);
85                 window.setSize(500, 500);
86                 window.setVisible(true);
87                 window.toFront();
88             }
89         } else {
90             SwingScilabWindow window = (SwingScilabWindow) SwingUtilities.getAncestorOfClass(SwingScilabWindow.class, browserTab);
91             if(window != null) {
92                 int state = window.getExtendedState();
93                 if((state & SwingScilabWindow.ICONIFIED) == SwingScilabWindow.ICONIFIED) {
94                     window.setExtendedState(state - SwingScilabWindow.ICONIFIED);
95                 }
96             }
97         }
98         return instance;
99     }
100
101     /**
102      * Set Variable Browser data
103      * @param data : data from scilab (type, name, size, ...)
104      */
105     public static void setVariableBrowserData(final Object[][] data) {
106         if (instance != null) {
107             SwingUtilities.invokeLater(new Runnable() {
108                 public void run() {
109                     if (instance != null) {
110                         instance.setData(data);
111                     }
112                 }
113             });
114         }
115     }
116
117     /**
118      * Update Variable Browser window
119      */
120     public static void updateVariableBrowser() {
121         if (instance != null) {
122             SwingScilabWindow window = (SwingScilabWindow) SwingUtilities.getAncestorOfClass(SwingScilabWindow.class, browserTab);
123             window.repaint();
124         }
125     }
126
127     /**
128      * Close Variable Browser
129      */
130     public static void closeVariableBrowser() {
131         if (instance != null) {
132             instance = null;
133         }
134     }
135
136     /**
137      * Get the variable browser singleton
138      * @return the Variable Browser
139      */
140     public static VariableBrowser getVariableBrowser() {
141         return instance;
142     }
143
144     /**
145      * Close Variable Browser
146      */
147     public void close() {
148         ClosingOperationsManager.startClosingOperationWithoutSave((SwingScilabDockablePanel) browserTab);
149     }
150
151     /**
152      * Set data displayed in JTable
153      * @param data : data to be displayed in JTable
154      */
155     public void setData(Object[][] data) {
156         browserTab.setData(data);
157     }
158
159
160     public void updateRowFiltering() {
161         browserTab.updateRowFiltering();
162     }
163
164     /**
165      * {@inheritDoc}
166      */
167     public void setVisible(boolean status) {
168         //super.setVisible(status);
169         browserTab.setVisible(status);
170     }
171 }