131 lines
3.8 KiB
Java
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);
|
|
}
|
|
|
|
}
|