package magic.ui.screen.menu.dev; import java.awt.BorderLayout; import java.awt.Dimension; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; import java.util.Scanner; import javax.swing.JComponent; import javax.swing.JFileChooser; import javax.swing.JScrollPane; import javax.swing.JTextArea; import magic.utility.FileIO; @SuppressWarnings("serial") class DeckDescriptionPreview extends JComponent implements PropertyChangeListener { File file = null; String description; private final JTextArea textArea = new JTextArea(); private final JScrollPane scrollPane = new JScrollPane(textArea); DeckDescriptionPreview(JFileChooser fc) { setPreferredSize(new Dimension(200, 50)); setLayout(new BorderLayout()); textArea.setEditable(false); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); add(scrollPane, BorderLayout.CENTER); fc.addPropertyChangeListener(this); } void loadDescription() { String content; description = ""; try { //load deck description content = FileIO.toStr(file); } catch (final IOException ex) { System.err.println("ERROR! Unable to load " + file.getName()); return; } try (final Scanner sc = new Scanner(content)) { while (sc.hasNextLine()) { final String line = sc.nextLine().trim(); if (line.startsWith("#")) { description += line.substring(1).trim() + System.lineSeparator(); } else { break; } } } showDescription(); } void showDescription() { textArea.setText(description); textArea.setCaretPosition(0); } @Override public void propertyChange(PropertyChangeEvent e) { String prop = e.getPropertyName(); if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(prop)) { description = ""; showDescription(); file = (File) e.getNewValue(); if (isShowing() && file != null && file.isDirectory() == false) { loadDescription(); } } } }