/**
*
*/
package de.danielsenff.radds.view;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.FileFilter;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreePath;
import org.jdesktop.application.Task;
import org.jdesktop.application.TaskService;
import util.FileUtil;
import de.danielsenff.radds.Radds;
import de.danielsenff.radds.models.FileNode;
import de.danielsenff.radds.models.FileTreeModel;
import de.danielsenff.radds.tasks.LoadImageTask;
/**
* SidePanel displaying the file-system tree and info panel.
* @author danielsenff
*
*/
public class FilesPanel extends JPanel {
static int panelWidth = 200;
static int panelHeight = 300;
private InfoPanel infoPanel;
/**
*
*/
public FilesPanel() {
this.setLayout(new BorderLayout());
init();
}
private void init() {
// FileViewTree
final FileSystemView fileSystemView = FileSystemView.getFileSystemView();
FileTreeModel fileTreeModel = new FileTreeModel(fileSystemView.getHomeDirectory(), new FileFilter() {
@Override
public boolean accept(File file) {
String[] extensions = {"dds", "tga", "tex"};
if (!file.isHidden() && !file.isDirectory())
return FileUtil.isExtension(file, extensions);
else if (!file.isHidden() && file.isDirectory())
return true;
else
return false;
}
});
final JTree fileTree = new JTree(fileTreeModel);
fileTree.setExpandsSelectedPaths(true);
fileTree.addMouseListener(new LoadListener());
fileTree.addKeyListener(new LoadListener());
fileTree.setCellRenderer(new DefaultTreeCellRenderer()
{
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)
{
JLabel label = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
File f = ((FileNode)value).getFile();
label.setText(fileSystemView.getSystemDisplayName(f));
label.setIcon(fileSystemView.getSystemIcon(f));
return label;
}
});
fileTree.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent event) {
TreePath selectionPath = fileTree.getSelectionPath();
if ( (event.isMetaDown() || event.isControlDown())
&& event.getKeyCode() == KeyEvent.VK_R ) {
fileTree.setModel(new FileTreeModel(fileSystemView.getHomeDirectory()));
//updateTreeNodes();
//preparePath(selectionPath, 1, (DefaultMutableTreeNode) getModel().getRoot());
fileTree.expandPath(selectionPath);
fileTree.setSelectionPath(selectionPath);
fileTree.invalidate();
}
}
});
final JScrollPane treeScroller = new JScrollPane(fileTree);
add(treeScroller, BorderLayout.CENTER);
// information
/* TODO new action
JButton gotoButton = new JButton("Go to�");
gotoButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String url = JOptionPane.showInputDialog("Please enter the URL to the file.");
url.trim();
try {
openImage(new File(url));
} catch (Exception ex) {
}
}
});
this.add(gotoButton, BorderLayout.NORTH);*/
// information
infoPanel = new InfoPanel();
this.add(infoPanel, BorderLayout.SOUTH);
}
/**
* @return
*/
public InfoPanel getInfoPanel() {
return this.infoPanel;
}
private void openImage(File file) {
LoadImageTask convertTask = new LoadImageTask(file);
TaskService ts = Radds.getApplication().getContext().getTaskService();
ts.execute(convertTask);
}
class LoadListener implements KeyListener, MouseListener {
@Override
public void keyPressed(final KeyEvent event) {
if(event.getKeyCode() == KeyEvent.VK_ENTER) {
processEvent(event);
}
}
@Override
public void keyReleased(final KeyEvent e) {}
@Override
public void keyTyped(final KeyEvent e) {}
@Override
public void mouseClicked(final MouseEvent click) {
if(click.getClickCount() == 2) {
processEvent(click);
}
}
private void processEvent(final InputEvent click) {
final JTree fileTree = ((JTree) click.getSource());
final FileNode node = (FileNode) fileTree.getSelectionPath().getLastPathComponent();
File file = node.getFile();
if( !file.isDirectory())
openImage(file);
}
@Override
public void mouseEntered(final MouseEvent arg0) {}
@Override
public void mouseExited(final MouseEvent arg0) {}
@Override
public void mousePressed(final MouseEvent arg0) {}
@Override
public void mouseReleased(final MouseEvent arg0) {}
}
}