package ilarkesto.ui.swing;
import ilarkesto.core.logging.Log;
import ilarkesto.swing.ALazyTreeNode;
import java.io.File;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
public class DirSelectionComponent extends AComponent {
private static final Log LOG = Log.get(DirSelectionComponent.class);
private JTree tree;
// --- dependencies ---
private File selectedDir;
public void setSelectedDir(File selectedFolder) {
this.selectedDir = selectedFolder;
}
// --- ---
@Override
protected void initializeControls() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Computer", true);
for (File file : File.listRoots()) {
root.add(new DirNode(file));
}
tree = new JTree(root);
// tree.setRootVisible(false);
}
@Override
protected JComponent createComponent() {
JScrollPane scroller = new JScrollPane(tree);
return scroller;
}
@Override
protected void updateControls() {}
public File getSelectedDir() {
return selectedDir;
}
class DirNode extends ALazyTreeNode {
private File dir;
public DirNode(File dir) {
super(dir.getName().length() == 0 ? dir.getPath() : dir.getName(), true);
this.dir = dir;
}
@Override
protected void loadChildren() {
LOG.debug("Listing", dir.getPath());
File[] files = dir.listFiles();
if (files == null || files.length == 0) return;
for (File file : files) {
if (!file.isDirectory()) continue;
add(new DirNode(file));
}
}
}
}