131 lines
3.8 KiB
Java

package fr.uha.gabalier.view;
import fr.uha.gabalier.controller.ImageController;
import fr.uha.gabalier.core.ImageLoader;
import javax.swing.*;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
public class Preview extends JFrame {
static final int VIEW_WIDTH = 256;
static final int VIEW_HEIGHT = 128;
public static final String LEFT_COMMAND = "<";
public static final String RIGHT_COMMAND = ">";
private static final int ICON_WIDTH = 256;
private List<Image> model;
private ImageLoader loader;
private ImageView imageView;
// UI elements
private JMenuItem loadItem;
private JMenuItem cancelItem;
private JButton rightNavButton;
private JButton leftNavButton;
private final JTextField statusText;
public Preview() throws HeadlessException {
model = new ArrayList<>();
// UI elements
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
loadItem = new JMenuItem("Load");
fileMenu.add(loadItem);
loadItem.addActionListener(actionEvent -> doLoad());
cancelItem = new JMenuItem("Cancel");
fileMenu.add(cancelItem);
cancelItem.addActionListener(actionEvent -> doCancel());
final JMenuItem exitItem = new JMenuItem("Exit");
exitItem.addActionListener(actionEvent -> doExit());
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_DOWN_MASK));
fileMenu.add(exitItem);
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
imageView = new ImageView(model);
final ImageController controller = new ImageController(model);
imageView.setController(controller);
controller.setView(imageView);
getContentPane().add(imageView);
final JPanel navPanel = new JPanel();
getContentPane().add(navPanel);
leftNavButton = new JButton(LEFT_COMMAND);
leftNavButton.addActionListener(controller);
navPanel.add(leftNavButton);
rightNavButton = new JButton(RIGHT_COMMAND);
rightNavButton.addActionListener(controller);
navPanel.add(rightNavButton);
final JPanel statusPanel = new JPanel();
getContentPane().add(statusPanel);
statusText = new JTextField("0000 images loaded");
statusPanel.add(new JLabel("status :"));
statusPanel.add(statusText);
pack();
setVisible(true);
}
public void setModel(List<Image> images) {
this.model.clear();
this.model.addAll(images);
((ImageController) imageView.getController()).resetIndex();
}
public List<Image> getModel() {
return model;
}
public void setStatus(String status) {
this.statusText.setText(status);
}
private void doLoad() {
final JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
final int ret = fc.showOpenDialog(this);
if (ret == JFileChooser.APPROVE_OPTION) {
loader = new ImageLoader(this, ICON_WIDTH, fc.getSelectedFile());
preLoad();
loader.execute();
}
}
private void doExit() {
System.exit(0);
}
private void doCancel() {
loader.cancel(true);
}
public void preLoad() {
loadItem.setEnabled(false);
cancelItem.setEnabled(true);
rightNavButton.setEnabled(false);
leftNavButton.setEnabled(false);
}
public void postLoad() {
loadItem.setEnabled(true);
cancelItem.setEnabled(false);
rightNavButton.setEnabled(true);
leftNavButton.setEnabled(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(Preview::new);
}
}