]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/load/AudioLoader.java
Version 13, August 2011
[GpsPrune.git] / tim / prune / load / AudioLoader.java
1 package tim.prune.load;
2
3 import java.io.File;
4 import java.util.TreeSet;
5 import javax.swing.JFileChooser;
6
7 import tim.prune.App;
8 import tim.prune.GenericFunction;
9 import tim.prune.I18nManager;
10 import tim.prune.UpdateMessageBroker;
11 import tim.prune.config.Config;
12 import tim.prune.data.AudioClip;
13 import tim.prune.undo.UndoLoadAudios;
14
15 /**
16  * Class to manage the loading of audio clips
17  */
18 public class AudioLoader extends GenericFunction
19 {
20         private JFileChooser _fileChooser = null;
21         private GenericFileFilter _fileFilter = null;
22         private TreeSet<AudioClip> _fileList = null;
23
24
25         /**
26          * Constructor
27          * @param inApp Application object to inform of data load
28          */
29         public AudioLoader(App inApp)
30         {
31                 super(inApp);
32                 _fileFilter = new AudioFileFilter();
33         }
34
35         /** Get the name key */
36         public String getNameKey() {
37                 return "function.loadaudio";
38         }
39
40         /**
41          * Open the GUI to select options and start the load
42          */
43         public void begin()
44         {
45                 // Create file chooser if necessary
46                 if (_fileChooser == null)
47                 {
48                         _fileChooser = new JFileChooser();
49                         _fileChooser.setMultiSelectionEnabled(true);
50                         _fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
51                         _fileChooser.setFileFilter(_fileFilter);
52                         _fileChooser.setDialogTitle(I18nManager.getText(getNameKey()));
53                         // start from directory in config if already set by other operations
54                         String configDir = Config.getConfigString(Config.KEY_PHOTO_DIR);
55                         if (configDir == null) {configDir = Config.getConfigString(Config.KEY_TRACK_DIR);}
56                         if (configDir != null) {_fileChooser.setCurrentDirectory(new File(configDir));}
57                 }
58                 // Show file dialog to choose file / directory(ies)
59                 if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
60                 {
61                         _fileList = new TreeSet<AudioClip>(new MediaSorter());
62                         processFileList(_fileChooser.getSelectedFiles());
63                         final int numFiles = _fileList.size();
64                         if (numFiles == 0) {
65                                 _app.showErrorMessage(getNameKey(), "error.audioload.nofilesfound");
66                         }
67                         else
68                         {
69                                 // Construct undo object
70                                 UndoLoadAudios undo = new UndoLoadAudios(numFiles);
71                                 _app.getTrackInfo().addAudios(_fileList);
72                                 _app.completeFunction(undo, I18nManager.getText("confirm.audioload"));
73                                 UpdateMessageBroker.informSubscribers();
74                         }
75                 }
76         }
77
78         /**
79          * Process an array of File objects to load
80          * @param inFiles array of selected Files
81          */
82         private void processFileList(File[] inFiles)
83         {
84                 for (File file : inFiles)
85                 {
86                         if (file.exists() && file.canRead())
87                         {
88                                 if (file.isFile()) {
89                                         if (_fileFilter.accept(file)) {
90                                                 _fileList.add(new AudioClip(file));
91                                         }
92                                 }
93                                 else if (file.isDirectory()) {
94                                         processFileList(file.listFiles());
95                                 }
96                         }
97                 }
98         }
99 }