57b0e55beff245962e4ab3fab342b1fb6a5515be
[scilab.git] / scilab / modules / xcos / src / java / org / scilab / modules / xcos / actions / OpenAction.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009 - DIGITEO - Vincent COUVERT
4  * Copyright (C) 2011 - Scilab Enterprises - Clement DAVID
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16
17 package org.scilab.modules.xcos.actions;
18
19 import java.awt.Toolkit;
20 import java.awt.event.ActionEvent;
21 import java.awt.event.KeyEvent;
22 import java.io.File;
23 import java.io.IOException;
24
25 import javax.swing.JButton;
26 import javax.swing.JFileChooser;
27 import javax.swing.filechooser.FileFilter;
28
29 import org.scilab.modules.graph.ScilabGraph;
30 import org.scilab.modules.graph.actions.base.DefaultAction;
31 import org.scilab.modules.gui.bridge.filechooser.SwingScilabFileChooser;
32 import org.scilab.modules.gui.filechooser.ScilabFileChooser;
33 import org.scilab.modules.gui.menuitem.MenuItem;
34 import org.scilab.modules.xcos.Xcos;
35 import org.scilab.modules.xcos.configuration.ConfigurationManager;
36 import org.scilab.modules.xcos.io.XcosFileType;
37 import org.scilab.modules.xcos.utils.XcosMessages;
38
39 /**
40  * File opening management
41  */
42 @SuppressWarnings(value = { "serial" })
43 public final class OpenAction extends DefaultAction {
44     /** Name of the action */
45     public static final String NAME = XcosMessages.OPEN;
46     /** Icon name of the action */
47     public static final String SMALL_ICON = "document-open";
48     /** Mnemonic key of the action */
49     public static final int MNEMONIC_KEY = KeyEvent.VK_O;
50     /** Accelerator key for the action */
51     public static final int ACCELERATOR_KEY = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
52
53     /**
54      * Constructor
55      *
56      * @param scilabGraph
57      *            associated Scilab Graph
58      */
59     public OpenAction(ScilabGraph scilabGraph) {
60         super(scilabGraph);
61     }
62
63     /**
64      * Create a menu to add in Scilab Graph menu bar
65      *
66      * @param scilabGraph
67      *            associated Scilab Graph
68      * @return the menu
69      */
70     public static MenuItem createMenu(ScilabGraph scilabGraph) {
71         return createMenu(scilabGraph, OpenAction.class);
72     }
73
74     /**
75      * Create a button to add in Scilab Graph tool bar
76      *
77      * @param scilabGraph
78      *            associated Scilab Graph
79      * @return the button
80      */
81     public static JButton createButton(ScilabGraph scilabGraph) {
82         return createButton(scilabGraph, OpenAction.class);
83     }
84
85     /**
86      * @param e
87      *            parameter
88      * @see org.scilab.modules.graph.actions.base.DefaultAction#actionPerformed(java.awt.event.ActionEvent)
89      */
90     @Override
91     public void actionPerformed(ActionEvent e) {
92         final SwingScilabFileChooser fc = createFileChooser();
93
94         /* Configure the file chooser */
95         configureFileFilters(fc);
96         ConfigurationManager.configureCurrentDirectory(fc);
97
98         try {
99             displayAndOpen(fc, getGraph(e).getAsComponent());
100         } catch (IOException e1) {
101             e1.printStackTrace();
102         }
103     }
104
105     /*
106      * Helpers functions to share file chooser code
107      */
108
109     public static SwingScilabFileChooser createFileChooser() {
110         final SwingScilabFileChooser fc = ((SwingScilabFileChooser) ScilabFileChooser.createFileChooser().getAsSimpleFileChooser());
111
112         fc.setTitle(XcosMessages.OPEN);
113         fc.setUiDialogType(JFileChooser.OPEN_DIALOG);
114         fc.setMultipleSelection(true);
115         return fc;
116     }
117
118     public static void configureFileFilters(final JFileChooser fc) {
119         fc.setAcceptAllFileFilterUsed(true);
120
121         final FileFilter[] filters = XcosFileType.getLoadingFilters();
122         for (FileFilter fileFilter : filters) {
123             fc.addChoosableFileFilter(fileFilter);
124         }
125         fc.setFileFilter(fc.getAcceptAllFileFilter());
126     }
127
128     protected static void displayAndOpen(final SwingScilabFileChooser fc, final java.awt.Component component) throws IOException {
129         final int status = fc.showOpenDialog(component);
130         if (status != JFileChooser.APPROVE_OPTION) {
131             return;
132         }
133
134         final File onlySelected = fc.getSelectedFile();
135         if (onlySelected != null) {
136             Xcos.getInstance().open(onlySelected.getCanonicalPath(), 0);
137         }
138
139         final File[] multiSelected = fc.getSelectedFiles();
140         for (File file : multiSelected) {
141             if (file != onlySelected) {
142                 Xcos.getInstance().open(file.getCanonicalPath(), 0);
143             }
144         }
145     }
146 }