package org.lysty.ui;
import java.awt.event.ActionEvent;
import java.io.File;
import javax.swing.AbstractAction;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.filechooser.FileFilter;
import net.miginfocom.swing.MigLayout;
import org.lysty.core.SongIndexer;
public class IndexerWindow extends LFrame {
private static final String CAPTION_ADD_FOLDER = "Add Folder";
private static final String CAPTION_INDEX_DEPTH = "Index Depth";
private static final String CAPTION_IS_INCREMENTAL = "Is Incremental";
private static final String BTN_CAPTION_INDEX = "Index...";
/**
*
*/
private static final long serialVersionUID = -44396160001605308L;
private static final int INDEXER_WIDTH = 400;
private static final int INDEXER_HEIGHT = 300;
private static IndexerWindow self;
private DefaultListModel model;
JList lstFolders;
JCheckBox chkIsIncremental;
JTextField txtDepth;
JButton btnIndex;
private JButton btnAddFolder;
private JScrollPane scroller;
private IndexerWindow(String title) {
super(BTN_CAPTION_INDEX);
createControls();
layoutUI();
}
private void layoutUI() {
JPanel panel = new JPanel();
MigLayout layout = new MigLayout("insets 6 6 6 6");
panel.setLayout(layout);
panel.add(btnAddFolder);
JLabel lblDepth = new JLabel("Depth");
panel.add(lblDepth);
panel.add(txtDepth);
panel.add(chkIsIncremental);
panel.add(btnIndex, "wrap");
panel.add(scroller, "span,growx");
this.setContentPane(panel);
this.pack();
}
private void createControls() {
btnAddFolder = new JButton(new AbstractAction(CAPTION_ADD_FOLDER) {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("Choose folder");
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setFileFilter(new FileFilter() {
@Override
public String getDescription() {
// TODO Auto-generated method stub
return "Folders";
}
@Override
public boolean accept(File arg0) {
return arg0.isDirectory();
}
});
chooser.setMultiSelectionEnabled(true);
int r = chooser.showOpenDialog(IndexerWindow.this);
if (r != JFileChooser.CANCEL_OPTION) {
File[] files = chooser.getSelectedFiles();
for (File file : files) {
model.addElement(file);
}
}
}
});
btnIndex = new JButton(new AbstractAction(BTN_CAPTION_INDEX) {
@Override
public void actionPerformed(ActionEvent e) {
index();
}
});
java.awt.Font oldFont = btnIndex.getFont();
java.awt.Font newFont = new java.awt.Font(oldFont.getName(),
java.awt.Font.BOLD, oldFont.getSize());
btnIndex.setFont(newFont);
lstFolders = new JList();
chkIsIncremental = new JCheckBox(CAPTION_IS_INCREMENTAL);
txtDepth = new JTextField();
setDefaults();
model = new DefaultListModel();
lstFolders.setModel(model);
scroller = new JScrollPane(lstFolders);
this.setVisible(true);
this.setSize(INDEXER_WIDTH, INDEXER_HEIGHT);
}
private void setDefaults() {
txtDepth.setText(SongIndexer.DEFAULT_DEPTHS_TO_INDEX + "");
chkIsIncremental.setSelected(true);
}
public static IndexerWindow getInstance() {
if (self == null) {
self = new IndexerWindow("");
}
return self;
}
public void setFiles(File[] files) {
for (File file : files) {
model.addElement(file);
}
}
public void index() {
final File[] files = new File[model.size()];
for (int i = 0; i < model.size(); i++) {
files[i] = (File) model.get(i);
}
Thread thread = new Thread() {
@Override
public void run() {
ProgressWindow indexProgressWindow = new ProgressWindow(
"Indexing", true);
indexProgressWindow.setLocationRelativeTo(IndexerWindow.this);
SongIndexer.index(files, Integer.parseInt(txtDepth.getText()),
chkIsIncremental.isSelected(), indexProgressWindow);
}
};
thread.start();
this.setVisible(false);
}
}