/**
* Copyright 2011-2013 Universite Joseph Fourier, LIG, ADELE team
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* DeviceManagerPanel.java - 3 juil. 2013
*/
package fr.imag.adele.apam.tutorials.lights.panel;
import fr.imag.adele.apam.tutorials.lights.devices.BinaryLight;
import fr.imag.adele.apam.tutorials.lights.devices.SimpleButton;
import fr.imag.adele.apam.tutorials.lights.devices.messages.LightStatusChanged;
import javax.swing.*;
import javax.swing.plaf.DimensionUIResource;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.Set;
/**
* @author thibaud
*
*/
public class LightManagerPanel {
private javax.swing.JFrame frame;
private javax.swing.JButton btn;
private String name ="APAM Light Manager Panel";
Set<BinaryLight> theLights;
Set<SimpleButton> theButtons;
private JPanel buttonsColumn;
private JPanel lightsColumn;
public void started() {
System.out.println("LightManagerPanel.started()");
frame = new javax.swing.JFrame(name);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
buttonsColumn = new JPanel();
buttonsColumn.setLayout(new BoxLayout(buttonsColumn, BoxLayout.Y_AXIS));
buttonsColumn.setBorder(BorderFactory.createTitledBorder("Buttons"));
lightsColumn = new JPanel();
lightsColumn.setLayout(new BoxLayout(lightsColumn, BoxLayout.Y_AXIS));
lightsColumn .setBorder(BorderFactory.createTitledBorder("Lights"));
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.X_AXIS));
rebuildLightsColumn();
rebuildButtonsColumn();
repackFrame();
}
private void repackFrame() {
//frame.setVisible(false);
//frame.removeAll();
frame.add(buttonsColumn);
frame.add(lightsColumn);
// frame.add(new JLabel("toto"));
frame.pack();
frame.setVisible(true);
}
public void stopped() {
System.out.println("LightManagerPanel.stopped()");
if (frame != null) {
frame.dispose();
frame = null;
}
}
public void aLightStatusHasChanged(LightStatusChanged event) {
System.out.println("LightManagerPanel.aLightStatusHasChanged(evt)");
rebuildLightsColumn();
}
/**
* CallBack method on dependency resolution
* @param button
*/
public void newButton() {
rebuildButtonsColumn();
}
/**
* CallBack method on dependency resolution
*/
public void removeButton() {
rebuildButtonsColumn();
}
/**
* CallBack method on dependency resolution
* @param light
*/
public void newLight() {
rebuildLightsColumn();
}
/**
* CallBack method on dependency resolution
*/
public void removeLight() {
rebuildLightsColumn();
}
private void rebuildButtonsColumn() {
System.out.println("LightManagerPanel.rebuildButtonsColumn(), found "
+theButtons.size()+" buttons to add to the list");
buttonsColumn.removeAll();
if (theButtons != null && theButtons.size()>0) {
Iterator<SimpleButton> it=theButtons.iterator();
while(it.hasNext()) {
final SimpleButton btn= it.next();
JPanel panel=new JPanel();
panel.setBorder(BorderFactory.createTitledBorder(
btn.getName()+" in "+btn.getLocation()));
JButton btnGUI = new JButton("Press !");
btnGUI.setPreferredSize(new DimensionUIResource(180, 40));
btnGUI.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("A button has been clicked : "+btn.getName());
btn.pressButton();
}
});
panel.add(btnGUI);
buttonsColumn.add(panel);
}
}
repackFrame();
}
private void rebuildLightsColumn() {
System.out.println("LightManagerPanel.rebuildLightsColumn(), found "
+theLights.size()+" lights to add to the list");
lightsColumn.removeAll();
if (theLights != null && theLights.size()>0) {
Iterator<BinaryLight> it=theLights.iterator();
while(it.hasNext()) {
BinaryLight light = it.next();
JPanel panel=new JPanel();
panel.setBorder(BorderFactory.createTitledBorder(
light.getName() + " in " + light.getLocation()));
JLabel lightGUI= new javax.swing.JLabel();
lightGUI.setOpaque(true);
lightGUI.setPreferredSize(new DimensionUIResource(180, 40));
if(light.isLightOn())
lightGUI.setBackground(Color.YELLOW);
else lightGUI.setBackground(Color.GRAY);
panel.add(lightGUI);
lightsColumn.add(panel);
}
}
repackFrame();
}
}