148 lines
4.4 KiB
Java
148 lines
4.4 KiB
Java
package client.components;
|
|
|
|
import client.communication.Communicator;
|
|
import client.components.downloadModal.DownloadModal;
|
|
import client.components.imagePanel.ImagePanel;
|
|
import client.persistence.Cell;
|
|
import client.persistence.ImageState;
|
|
import client.persistence.NewProjectListener;
|
|
import client.persistence.Settings;
|
|
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.event.WindowAdapter;
|
|
import java.awt.event.WindowEvent;
|
|
import java.awt.event.WindowListener;
|
|
import java.beans.PropertyChangeEvent;
|
|
import java.beans.PropertyChangeListener;
|
|
import java.io.*;
|
|
|
|
public class MainWindow extends JFrame implements Serializable {
|
|
|
|
public ImageState imageState;
|
|
private Communicator communicator;
|
|
|
|
JSplitPane body = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JPanel(), new JPanel());
|
|
|
|
public MainWindow(Communicator communicator, String username, String password) {
|
|
Settings settings = loadSettings(username);
|
|
|
|
this.imageState = loadImageState(username);
|
|
|
|
if(this.imageState == null) {
|
|
this.imageState = new ImageState(settings, communicator, username, password);
|
|
} else {
|
|
this.imageState.setCommunicator(communicator);
|
|
}
|
|
|
|
this.imageState.setSettings(settings);
|
|
|
|
this.imageState.addNewProjectListener(newProjectListener);
|
|
this.communicator = communicator;
|
|
|
|
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
|
|
|
this.setSize(settings.getWindowWidth(), settings.getWindowHeight());
|
|
this.setLocation(settings.getWindowPositionX(), settings.getWindowPositionY());
|
|
|
|
setupView();
|
|
|
|
this.imageState.initEvents();
|
|
this.addWindowListener(windowListener);
|
|
}
|
|
|
|
private void setupView() {
|
|
setupFileMenu();
|
|
setupImagePanel();
|
|
setupSplitView();
|
|
|
|
this.add(body, BorderLayout.CENTER);
|
|
|
|
body.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, new PropertyChangeListener() {
|
|
@Override
|
|
public void propertyChange(PropertyChangeEvent pce) {
|
|
int dividerLocation = body.getDividerLocation();
|
|
|
|
imageState.getSettings().setBaseSplitY(dividerLocation);
|
|
}
|
|
});
|
|
}
|
|
|
|
private void setupFileMenu() {
|
|
// Setup File Menu
|
|
this.add(new FileMenu(this, communicator, imageState), BorderLayout.NORTH);
|
|
}
|
|
|
|
private void setupImagePanel() {
|
|
body.setTopComponent(new ImagePanel(imageState));
|
|
}
|
|
|
|
private void setupSplitView() {
|
|
SplitBase splitBase = new SplitBase(imageState, communicator);
|
|
|
|
body.setBottomComponent(splitBase);
|
|
body.setBorder(null);
|
|
body.setDividerLocation(imageState.getSettings().getBaseSplitY());
|
|
}
|
|
|
|
public ImageState loadImageState(String username) {
|
|
File dest = new File("profiles/"+username);
|
|
if(dest.exists()) {
|
|
FileInputStream fis = null;
|
|
ObjectInputStream in = null;
|
|
try {
|
|
fis = new FileInputStream("profiles/"+username+"/state.ser");
|
|
in = new ObjectInputStream(fis);
|
|
return (ImageState)in.readObject();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
} catch (ClassNotFoundException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public Settings loadSettings(String username) {
|
|
File dest = new File("profiles/"+username);
|
|
if(dest.exists()) {
|
|
FileInputStream fis = null;
|
|
ObjectInputStream in = null;
|
|
try {
|
|
fis = new FileInputStream("profiles/"+username+"/settings.ser");
|
|
in = new ObjectInputStream(fis);
|
|
return (Settings)in.readObject();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
} catch (ClassNotFoundException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
return Settings.defaultSettings();
|
|
}
|
|
|
|
private WindowListener windowListener = new WindowAdapter() {
|
|
@Override
|
|
public void windowClosing(WindowEvent e) {
|
|
super.windowClosing(e);
|
|
|
|
}
|
|
|
|
@Override
|
|
public void windowClosed(WindowEvent e) {
|
|
super.windowClosed(e);
|
|
|
|
}
|
|
};
|
|
|
|
private NewProjectListener newProjectListener = new NewProjectListener() {
|
|
@Override
|
|
public void hasNewProject() {
|
|
|
|
|
|
}
|
|
};
|
|
}
|