You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

177 lines
6.0 KiB

package cmpt213.assignment4.packagedeliveries.client.view;
import cmpt213.assignment4.packagedeliveries.client.control.PackageDeliveriesTracker;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
public class JavaSwingUI implements ActionListener {
private final PackageDeliveriesTracker pTracker = PackageDeliveriesTracker.getInstance();
JFrame uiFrame;
JPanel uiPanel;
JScrollPane scrollView;
PACKAGE_FILTER_OPTION option = PACKAGE_FILTER_OPTION.ALL;
;
public void displayMainPage() {
pTracker.load();
uiFrame = new JFrame("Package deliveries tracker");
uiFrame.setSize(500, 500);
uiFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
uiFrame.setLayout(new BoxLayout(uiFrame.getContentPane(), BoxLayout.Y_AXIS));
uiFrame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
pTracker.save();
super.windowClosing(e);
uiFrame.dispose();
}
});
uiFrame.setVisible(true);
dsplayOptionButtons();
addButtons();
setupScrollPane();
refreshPackageList();
}
private void setupScrollPane() {
uiPanel = new JPanel();
scrollView = new JScrollPane(uiPanel);
uiPanel.setLayout(new BoxLayout(uiPanel, BoxLayout.Y_AXIS));
scrollView.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
uiPanel.add(Box.createVerticalGlue());
uiFrame.getContentPane().add(scrollView);
uiFrame.pack();
}
private void displayPackages(ArrayList<String> packages) {
uiPanel.removeAll();
uiPanel.setLayout(new BoxLayout(uiPanel, BoxLayout.Y_AXIS));
scrollView.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
uiPanel.add(Box.createVerticalGlue());
uiFrame.getContentPane().add(scrollView);
System.out.println(packages);
if (packages.get(0) != "No packages to show") {
for (int i = 0; i < packages.size(); i++) {
JPanel p = new JPanel();
JTextPane pkgPane = new JTextPane();
pkgPane.setEditable(false);
pkgPane.setText(packages.get(i));
p.add(pkgPane);
if (option == PACKAGE_FILTER_OPTION.ALL) {
JButton remove = new JButton();
int finalI = i;
remove.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
pTracker.removePcakage(finalI);
refreshPackageList();
}
});
remove.setText("Remove");
p.add(remove);
JCheckBox delivered = new JCheckBox("Delivered?");
delivered.setBounds(100, 100, 50, 50);
delivered.setSelected(pTracker.isDelivered(i));
int finalI1 = i;
delivered.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
delivered.setSelected(true);
pTracker.setDelivered(finalI1);
refreshPackageList();
}
});
p.add(delivered);
}
uiPanel.add(p);
}
}
uiFrame.validate();
uiFrame.pack();
}
private void addButtons() {
JButton add = new JButton("Add a package");
JPanel addPanel = new JPanel();
addPanel.setLayout(new BoxLayout(addPanel, BoxLayout.X_AXIS));
addPanel.add(add);
addPanel.setPreferredSize(new Dimension(500, 50));
uiFrame.add(addPanel);
add.addActionListener(this);
}
private void dsplayOptionButtons() {
JButton btnAll = new JButton("All");
JButton btnOverdue = new JButton("Overdue");
JButton btnUpcoming = new JButton("Upcoming");
btnAll.addActionListener(this);
btnOverdue.addActionListener(this);
btnUpcoming.addActionListener(this);
JPanel btnPanel = new JPanel();
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.X_AXIS));
btnPanel.add(btnAll);
btnPanel.add(btnOverdue);
btnPanel.add(btnUpcoming);
btnPanel.setPreferredSize(new Dimension(500, 50));
uiFrame.add(btnPanel);
}
@Override
public void actionPerformed(ActionEvent e) {
String actionString = e.getActionCommand();
switch (actionString) {
case "Add a package":
addPackage();
break;
case "All":
option = PACKAGE_FILTER_OPTION.ALL;
refreshPackageList();
break;
case "Overdue":
option = PACKAGE_FILTER_OPTION.OVERDUE;
refreshPackageList();
break;
case "Upcoming":
option = PACKAGE_FILTER_OPTION.UPCOMING;
refreshPackageList();
break;
}
}
private void addPackage() {
new Input(uiFrame);
refreshPackageList();
}
private void refreshPackageList() {
switch (option) {
case ALL:
ArrayList<String> allPackages = pTracker.getAllPackages();
displayPackages(allPackages);
break;
case OVERDUE:
ArrayList<String> overDuePkg = pTracker.overDuePackages();
displayPackages(overDuePkg);
break;
case UPCOMING:
ArrayList<String> upcomingPkg = pTracker.upcomingPackages();
displayPackages(upcomingPkg);
break;
}
}
enum PACKAGE_FILTER_OPTION {ALL, OVERDUE, UPCOMING}
}