/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.dlect.ui;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JComponent;
import org.dlect.controller.GUIController;
import org.dlect.controller.event.ControllerEvent;
import org.dlect.controller.event.ControllerState;
import org.dlect.controller.helper.Controller;
import org.dlect.events.Event;
import org.dlect.events.EventListener;
import org.dlect.events.wrapper.Wrappers;
import org.dlect.ui.decorator.BusyPainterUI;
import org.dlect.ui.helper.LayerUIUtil;
import org.dlect.ui.login.LoginPanel;
import org.jdesktop.jxlayer.JXLayer;
/**
*
* java.util.ResourceBundle.getBundle("org/lee/echo360/ui/ui").getString("NEXT")
* internationalization
*
* @author lee
*/
public class MainFrame extends javax.swing.JFrame implements EventListener {
private JXLayer<JComponent> loginPanelLayer;
private BusyPainterUI loginBusyUI;
private CoursesScreen courseScreen;
private BusyPainterUI courseBusyUI;
private JXLayer<JComponent> coursePanel;
private final GUIController controller;
private LoginPanel loginPanel;
/**
* Creates new form MainFrame
*
* @param c
*/
public MainFrame(GUIController c) {
controller = c;
initComponents();
initLayeredPane();
Wrappers.addSwingListenerTo(this, c, Controller.class);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
panel = new javax.swing.JLayeredPane();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("org/dlect/ui/ui"); // NOI18N
setTitle(bundle.getString("TITLE")); // NOI18N
setMinimumSize(new java.awt.Dimension(450, 300));
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
getContentPane().setLayout(new java.awt.GridBagLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
getContentPane().add(panel, gridBagConstraints);
pack();
}// </editor-fold>//GEN-END:initComponents
private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
controller.closeApplication();
}//GEN-LAST:event_formWindowClosing
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLayeredPane panel;
// End of variables declaration//GEN-END:variables
private void addLoginPanel() {
if (loginPanelLayer == null) {
loginPanel = new LoginPanel(controller) {
private static final long serialVersionUID = 1L;
@Override
public void cancel() {
controller.closeApplication();
}
@Override
public void complete() {
}
};
loginBusyUI = createBusyPainter();
loginPanelLayer = new JXLayer<>(loginPanel, loginBusyUI);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.weightx = 1;
c.weighty = 1;
panel.add(loginPanelLayer, c);
panel.setLayer(loginPanelLayer, 100);
initLoginPanel();
}
}
private BusyPainterUI createBusyPainter() {
BusyPainterUI painterUi = new BusyPainterUI();
painterUi.setLockedEffects(LayerUIUtil.blur());
return painterUi;
}
private void initLayeredPane() {
panel.setLayout(new GridBagLayout());
addLoginPanel();
addCoursePanel();
}
private void addCoursePanel() {
if (coursePanel == null) {
courseScreen = new CoursesScreen(controller);
courseBusyUI = createBusyPainter();
coursePanel = new JXLayer<>(courseScreen, courseBusyUI);
courseBusyUI.setLocked(true);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.weightx = 1;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
panel.add(coursePanel, c);
panel.setLayer(coursePanel, 50);
}
}
public void setCoursesLocked(boolean b) {
courseBusyUI.setSpinnerShown(b);
courseBusyUI.setLocked(b);
}
public void setLoginLocked(boolean b) {
loginBusyUI.setSpinnerShown(b);
loginBusyUI.setLocked(b);
}
public void setLoginVisible(boolean visible) {
if (visible) {
panel.setLayer(loginPanelLayer, 100);
courseBusyUI.setSpinnerShown(false);
courseBusyUI.setLocked(true);
} else {
panel.setLayer(loginPanelLayer, 20);
}
}
public CoursesScreen getCourseScreen() {
return courseScreen;
}
public LoginPanel getLoginPanel() {
return loginPanel;
}
public void initLoginPanel() {
loginPanel.setProvider(controller.getLoginController().getSelectedProviderDetail());
loginPanel.setUsername(controller.getLoginController().getUsername());
loginPanel.setPassword(controller.getLoginController().getPassword());
loginPanel.doLogin();
}
@Override
public void processEvent(Event e) {
if (e instanceof ControllerEvent) {
ControllerEvent ce = (ControllerEvent) e;
switch (ce.getEventID()) {
case LOGIN:
processLogin(ce.getAfter());
break;
case SUBJECT:
processSubject(ce.getAfter());
break;
case LECTURE:
processLecture(ce.getAfter());
break;
}
}
}
protected void processLogin(ControllerState state) {
switch (state) {
case STARTED:
setLoginVisible(true);
setLoginLocked(true);
setCoursesLocked(true);
break;
case COMPLETED:
setLoginVisible(false);
setCoursesLocked(true);
break;
case FAILED:
setLoginVisible(true);
setCoursesLocked(true);
setLoginLocked(false);
break;
}
}
protected void processSubject(ControllerState state) {
setLoginVisible(false);
switch (state) {
case FAILED:
setLoginVisible(true);
setCoursesLocked(true);
setLoginLocked(false);
break;
case STARTED:
setLoginVisible(false);
setCoursesLocked(true);
break;
case COMPLETED:
setLoginVisible(false);
setCoursesLocked(false);
break;
}
}
protected void processLecture(ControllerState state) {
setLoginVisible(false);
setCoursesLocked(false);
}
}