package com.github.swapii.condi; import com.github.swapii.condi.ui.Tree; import com.github.swapii.condi.ui.tree.TreeItem; import com.googlecode.lanterna.gui.Action; import com.googlecode.lanterna.gui.GUIScreen; import com.googlecode.lanterna.gui.Window; import com.googlecode.lanterna.gui.component.Button; import com.googlecode.lanterna.gui.component.EmptySpace; import com.googlecode.lanterna.gui.component.Panel; import com.googlecode.lanterna.gui.layout.BorderLayout; import com.googlecode.lanterna.gui.listener.WindowAdapter; import com.googlecode.lanterna.terminal.TerminalSize; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileFilter; /** * @author Pavel Savinov * @version 7/20/13 12:19 PM */ public class FolderChooser extends Window { private static final Logger logger = LoggerFactory.getLogger(FolderChooser.class); private File selected; public FolderChooser(GUIScreen screen) { super("Choose folder to scan"); FileFilter fileFilter = new FileFilter() { @Override public boolean accept(File pathname) { return pathname.isDirectory(); } }; FileTreeItem root = new FileTreeItem(new File("/"), null, fileFilter); Tree tree = new Tree(root); tree.setOnItemSelectedListener(new Tree.OnItemSelectedListener() { @Override public void itemSelected(TreeItem item) { File file = ((FileTreeItem) item).getFile(); logger.debug("Folder selected: " + file.getAbsolutePath()); selected = file; } }); addComponent(tree, BorderLayout.CENTER); addComponent(new EmptySpace()); Panel buttonsPanel = new Panel(Panel.Orientation.HORISONTAL); buttonsPanel.addComponent(new Button("Cancel", new Action() { @Override public void doAction() { close(); } })); buttonsPanel.addComponent(new EmptySpace()); buttonsPanel.addComponent(new Button("Scan", new Action() { @Override public void doAction() { close(); } })); addComponent(buttonsPanel, BorderLayout.BOTTOM, BorderLayout.CENTER); TerminalSize size = screen.getScreen().getTerminalSize(); setWindowSizeOverride(new TerminalSize(size.getColumns() - 8, size.getRows() - 5)); screen.showWindow(this, GUIScreen.Position.OVERLAPPING); } }