175 lines
5.0 KiB
Java
175 lines
5.0 KiB
Java
package client.components.imagePanel;
|
|
|
|
import client.components.imagePanel.listeners.ImageControlsListener;
|
|
import client.persistence.ImageState;
|
|
import client.persistence.NewProjectListener;
|
|
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.util.ArrayList;
|
|
|
|
public class ImageControl extends JPanel {
|
|
|
|
private ArrayList<ImageControlsListener> imageControlsListeners;
|
|
|
|
private ImageState imageState;
|
|
|
|
private JButton zoomInButton;
|
|
private JButton zoomOutButton;
|
|
private JButton invertButton;
|
|
private JButton toggleHighlightsButton;
|
|
private JButton saveButton;
|
|
private JButton submitButton;
|
|
|
|
public ImageControl(ImageState imageState) {
|
|
this.imageState = imageState;
|
|
|
|
this.imageState.addNewProjectListener(newProjectListener);
|
|
|
|
setupView();
|
|
|
|
imageControlsListeners = new ArrayList<>();
|
|
}
|
|
|
|
private void setupView() {
|
|
boolean enabled = false;
|
|
|
|
if(imageState.isHasImage()) enabled = true;
|
|
|
|
zoomInButton = new JButton("Zoom In");
|
|
zoomInButton.addActionListener(zoomInAction);
|
|
zoomInButton.setEnabled(enabled);
|
|
this.add(zoomInButton, BorderLayout.WEST);
|
|
|
|
zoomOutButton = new JButton("Zoom Out");
|
|
zoomOutButton.addActionListener(zoomOutAction);
|
|
zoomOutButton.setEnabled(enabled);
|
|
this.add(zoomOutButton, BorderLayout.WEST);
|
|
|
|
invertButton = new JButton("Invert");
|
|
invertButton.addActionListener(invertImageAction);
|
|
invertButton.setEnabled(enabled);
|
|
this.add(invertButton, BorderLayout.WEST);
|
|
|
|
toggleHighlightsButton = new JButton("Toggle Highlights");
|
|
toggleHighlightsButton.addActionListener(toggleHighlightsAction);
|
|
toggleHighlightsButton.setEnabled(enabled);
|
|
this.add(toggleHighlightsButton, BorderLayout.WEST);
|
|
|
|
saveButton = new JButton("Save");
|
|
saveButton.setEnabled(enabled);
|
|
saveButton.addActionListener(saveAction);
|
|
this.add(saveButton, BorderLayout.WEST);
|
|
|
|
submitButton = new JButton("Submit");
|
|
submitButton.setEnabled(enabled);
|
|
submitButton.addActionListener(submitAction);
|
|
this.add(submitButton, BorderLayout.WEST);
|
|
|
|
this.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
|
|
}
|
|
|
|
@Override
|
|
public Dimension getMaximumSize() {
|
|
Dimension dim = super.getMaximumSize();
|
|
dim.height = 60;
|
|
return dim;
|
|
}
|
|
|
|
public void addControlsListener(ImageControlsListener imageControlsListener) {
|
|
imageControlsListeners.add(imageControlsListener);
|
|
}
|
|
|
|
private void updateZoomInListeners() {
|
|
for(ImageControlsListener cL : imageControlsListeners) {
|
|
cL.onScrollIncrease();
|
|
}
|
|
}
|
|
|
|
private void updateZoomOutListeners() {
|
|
for(ImageControlsListener cL : imageControlsListeners) {
|
|
cL.onScrollDecrease();
|
|
}
|
|
}
|
|
|
|
private void updateInvertImageListeners() {
|
|
for(ImageControlsListener cL : imageControlsListeners) {
|
|
cL.onInvertImage();
|
|
}
|
|
}
|
|
|
|
private void updateToggleHighlightsListeners() {
|
|
for(ImageControlsListener cL : imageControlsListeners) {
|
|
cL.onToggleHighlights();
|
|
}
|
|
}
|
|
|
|
private void updateSaveListeners() {
|
|
imageState.save();
|
|
}
|
|
|
|
private void updateSubmitListeners() {
|
|
imageState.submitProject();
|
|
}
|
|
|
|
|
|
private ActionListener zoomInAction = new AbstractAction() {
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
updateZoomInListeners();
|
|
}
|
|
};
|
|
|
|
private ActionListener zoomOutAction = new AbstractAction() {
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
updateZoomOutListeners();
|
|
}
|
|
};
|
|
|
|
private ActionListener invertImageAction = new AbstractAction() {
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
updateInvertImageListeners();
|
|
}
|
|
};
|
|
|
|
private ActionListener toggleHighlightsAction = new AbstractAction() {
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
updateToggleHighlightsListeners();
|
|
}
|
|
};
|
|
|
|
private ActionListener saveAction = new AbstractAction() {
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
updateSaveListeners();
|
|
}
|
|
};
|
|
|
|
private ActionListener submitAction = new AbstractAction() {
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
updateSubmitListeners();
|
|
}
|
|
};
|
|
|
|
private NewProjectListener newProjectListener = new NewProjectListener() {
|
|
@Override
|
|
public void hasNewProject() {
|
|
boolean status = imageState.isHasImage();
|
|
|
|
zoomInButton.setEnabled(status);
|
|
zoomOutButton.setEnabled(status);
|
|
invertButton.setEnabled(status);
|
|
toggleHighlightsButton.setEnabled(status);
|
|
saveButton.setEnabled(status);
|
|
submitButton.setEnabled(status);
|
|
}
|
|
};
|
|
|
|
}
|