package art.servers.colorsserver.M.gui.diagrams; import art.library.model.devices.colors.controller.M.M_ControllerConfiguration; import art.library.model.devices.colors.controller.M.M_SubcontrollerConfiguration; import art.library.model.devices.colors.controller.M.configuration.ALUVISA_Phase; import art.library.model.devices.colors.controller.M.configuration.ALUVISA_Plan; import art.library.gui.FlatGUI; import art.library.gui.flat.FlatButton; import art.library.gui.flat.FlatLabel; import art.library.gui.flat.FlatPanel; import art.library.gui.flat.FlatTextField; import art.library.gui.flat.combobox.FlatComboBox; import art.servers.Shared; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.TextEvent; import java.awt.event.TextListener; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.List; public class DiagramALUVISAPhases extends FlatPanel { private boolean colorEditable = false; private M_ControllerConfiguration m_controllerConfiguration = null; private M_SubcontrollerConfiguration m_subcontrollerConfiguration = null; private ALUVISA_Plan plan = null; private List lphase = null; private List lselected = new ArrayList(); private DiagramColumns diagramColumns = null; private DiagramRows diagramRows = null; private Diagram diagram = null; private Color color = new FlatPanel().getLook().background; private int selectedColor = 0; private double totalTime = 0; private double ty = 0; private ActionListener listener = null; private FlatPanel firstDiagramColumn = null; private List ldiagramColumns = new ArrayList(); private int realtimeCurrentPhase = -1; private int realtimeCurrentTime = -1; public DiagramALUVISAPhases(M_ControllerConfiguration m_controllerConfiguration, M_SubcontrollerConfiguration m_subcontrollerConfiguration, ALUVISA_Plan plan, ALUVISA_Phase phase) { List lphase = new ArrayList(); lphase.add(phase); initialise(m_controllerConfiguration, m_subcontrollerConfiguration, plan, lphase); } public DiagramALUVISAPhases(M_ControllerConfiguration m_controllerConfiguration, M_SubcontrollerConfiguration m_subcontrollerConfiguration, ALUVISA_Phase phase) { List lphase = new ArrayList(); lphase.add(phase); initialise(m_controllerConfiguration, m_subcontrollerConfiguration, null, lphase); } public DiagramALUVISAPhases(M_ControllerConfiguration m_controllerConfiguration, M_SubcontrollerConfiguration m_subcontrollerConfiguration, ALUVISA_Plan plan, List lphase) { initialise(m_controllerConfiguration, m_subcontrollerConfiguration, plan, lphase); } public DiagramALUVISAPhases(M_ControllerConfiguration m_controllerConfiguration, M_SubcontrollerConfiguration m_subcontrollerConfiguration, List lphase) { initialise(m_controllerConfiguration, m_subcontrollerConfiguration, null, lphase); } private void initialise(M_ControllerConfiguration m_controllerConfiguration, M_SubcontrollerConfiguration m_subcontrollerConfiguration, ALUVISA_Plan plan, List lphase) { this.plan = plan; this.m_controllerConfiguration = m_controllerConfiguration; this.m_subcontrollerConfiguration = m_subcontrollerConfiguration; this.lphase = lphase; this.setLayout(new BorderLayout()); this.add(diagramColumns = new DiagramColumns(), BorderLayout.NORTH); this.add(diagramRows = new DiagramRows(), BorderLayout.WEST); this.add(diagram = new Diagram(), BorderLayout.CENTER); setConfiguration(m_controllerConfiguration, m_subcontrollerConfiguration, lphase); this.addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { redimensionar(); } }); } public void timer(int phase, int time) { this.realtimeCurrentPhase = phase; this.realtimeCurrentTime = time; } private void redimensionar() { totalTime = 0; for (ALUVISA_Phase phase : lphase) totalTime = totalTime + phase.maximumTime; if (totalTime <= 0) totalTime = 1; ((DiagramColumns1)DiagramALUVISAPhases.this.ldiagramColumns.get(0)).redimensionar(); ((DiagramColumns2)DiagramALUVISAPhases.this.ldiagramColumns.get(1)).redimensionar(); DiagramALUVISAPhases.this.revalidate(); DiagramALUVISAPhases.this.repaint(); } public void setConfiguration(M_ControllerConfiguration m_controllerConfiguration, M_SubcontrollerConfiguration m_subcontrollerConfiguration, ALUVISA_Phase phase) { List lphase = new ArrayList(); lphase.add(phase); setConfiguration(m_controllerConfiguration, m_subcontrollerConfiguration, lphase); } public void setConfiguration(M_ControllerConfiguration m_controllerConfiguration, M_SubcontrollerConfiguration m_subcontrollerConfiguration, List lphase) { this.m_controllerConfiguration = m_controllerConfiguration; this.m_subcontrollerConfiguration = m_subcontrollerConfiguration; this.lphase = lphase; diagramColumns.reload(); } public void selectPhase() { lselected.clear(); repaint(); } public void selectPhase(List lphase) { lselected.clear(); lselected.addAll(lphase); repaint(); } public void selectPhase(ALUVISA_Phase phase) { lselected.clear(); lselected.add(phase); repaint(); } public void reload() { diagramColumns.reload(); revalidate(); repaint(); } public void setActionListener (ActionListener listener) { this.listener = listener; } public void setSelectedColor(int color) { this.selectedColor = color; } public void showFields(boolean lvalue[]) { diagramColumns.showFields(lvalue); } public void editable(boolean[] lvalue) { diagramColumns.editable(lvalue); repaint(); } public void editable(boolean value) { diagramColumns.editable(value); repaint(); } public void colorEditable(boolean value) { this.colorEditable = value; repaint(); } private class DiagramColumns extends FlatPanel { public DiagramColumns() { ldiagramColumns.add(new DiagramColumns1()); ldiagramColumns.add(new DiagramColumns2()); ldiagramColumns.add(new DiagramColumns3()); ldiagramColumns.add(new DiagramColumns4()); ldiagramColumns.add(new DiagramColumns5()); initialise(); } private void initialise() { this.removeAll(); int total = getVisibles(); this.setLayout(new GridLayout(total,1)); this.setPreferredSize(new Dimension(0, 22 * total)); for (FlatPanel panel : ldiagramColumns) { if (panel.isVisible() == true) { this.add(panel); } } } public void editable(boolean value) { ((DiagramColumns1)ldiagramColumns.get(0)).editable(value); ((DiagramColumns2)ldiagramColumns.get(1)).editable(value); } public void editable(boolean[] lvalue) { ((DiagramColumns1)ldiagramColumns.get(0)).editable(lvalue[0]); ((DiagramColumns2)ldiagramColumns.get(1)).editable(lvalue[1]); } private int getVisibles() { int result = 0; for (FlatPanel panel : ldiagramColumns) { if (panel.isVisible() == true) result = result + 1; } return result; } public void showFields (boolean[] lvalue) { firstDiagramColumn = null; for (int i=0; i lcombobox = new ArrayList(); public DiagramColumns1() { setLayout(null); } public void reload() { editable(editable); } public void editable(boolean value) { this.editable = value; for (Component component : lcombobox) { this.remove(component); } lcombobox.clear(); String[] intergreens = m_subcontrollerConfiguration.getIntergreensNumbers(); String[] phases = m_subcontrollerConfiguration.getPhasesStablesNumbers(); if (value == true) { for (ALUVISA_Phase phase : lphase) { FlatComboBox combobox = new FlatComboBox(); combobox.getLook().border = false; combobox.getLook().borderColor = FlatGUI.lookDesign.getColor("label.color.background").darker(); combobox.revalidate(); if(phase.type == ALUVISA_Phase.TYPE_TRANSITION) combobox.addItems(intergreens); if(phase.type == ALUVISA_Phase.TYPE_FIXED) combobox.addItems(phases); if(phase.type == ALUVISA_Phase.TYPE_ACTUATED) combobox.addItems(phases); combobox.setSelectedItem("" + phase.number); combobox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { for (int i=0; i ltextfield = new ArrayList(); public DiagramColumns2() { setLayout(null); } public void reload() { editable(editable); } public void editable(boolean value) { this.editable = value; for (Component component : ltextfield) { this.remove(component); } ltextfield.clear(); String[] intergreens = m_subcontrollerConfiguration.getIntergreensNumbers(); String[] phases = m_subcontrollerConfiguration.getPhasesStablesNumbers(); if (value == true) { for (ALUVISA_Phase phase : lphase) { FlatTextField textfield = new FlatTextField(); textfield.setNumeric(true, 1, 120); textfield.getLook().border = false; textfield.getLook().colorBorder = FlatGUI.lookDesign.getColor("label.color.background").darker(); textfield.revalidate(); textfield.setText("" + phase.maximumTime); textfield.setField(phase, "maximumTime"); textfield.setTextListener(new TextListener() { public void textValueChanged(TextEvent e) { try { totalTime = 0; for (ALUVISA_Phase phase : lphase) { totalTime = totalTime + phase.maximumTime; } if (totalTime <= 0) totalTime = 1; } catch (Exception exception) { } DiagramALUVISAPhases.this.redimensionar(); } }); ltextfield.add(textfield); this.add(textfield); } DiagramALUVISAPhases.this.redimensionar(); } } public void redimensionar() { try { if (totalTime <= 0) totalTime = 1; int w = getWidth(); int h = getHeight(); double dx = (w-150) / totalTime; int time = 0; for (int i=0; i ltime = new ArrayList(); for (int i=0; i 36) y = y + (dy-36)/2; DiagramColors.paint(g2, x, y, phase.maximumTime * dx, Math.min(36, dy), color); } time = time + phase.maximumTime; // Current position phase and time if ((phase.number == realtimeCurrentPhase) && (realtimeCurrentTime >= 0)) { double x = dx * realtimeCurrentTime; currentTimePositionRectangle = new Rectangle2D.Double(x,0,dx,getHeight()); } } g2.setColor(FlatGUI.lookDesign.getColor("label.color.background").darker()); time = 0; for (int i=0; i= x1) && (x < x2)) { rectangle = new Rectangle2D.Double(x1, (currentGroup * dy), x2-x1, dy); currentPhase = i; return; } time = time + maximumtime; } } } private void drawCenteredString(Graphics2D g2, String text, Rectangle2D rect, Font font) { FontMetrics metrics = g2.getFontMetrics(font); double x = rect.getX() + (rect.getWidth() - metrics.stringWidth(text)) / 2; double y = rect.getY() + ((rect.getHeight() - metrics.getHeight()) / 2) + metrics.getAscent(); g2.setFont(font); g2.drawString(text, (float)x, (float)y); } private void drawCenteredString(Graphics2D g2, String text, double x, Rectangle2D rect, Font font) { FontMetrics metrics = g2.getFontMetrics(font); double y = rect.getY() + ((rect.getHeight() - metrics.getHeight()) / 2) + metrics.getAscent(); g2.setFont(font); g2.drawString(text, (float)x, (float)y); } private void format(Graphics2D g2) { try { g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DEFAULT); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); int w = getWidth(); int h = getHeight(); g2.setBackground(color); g2.clearRect(0, 0, w, h); } catch (Exception e) { } } private void paintLines(Graphics2D g2, int w, int h, boolean paintUpperLine) { try { if (totalTime <= 0) totalTime = 1; double dx = (w-150) / totalTime; int time = 0; g2.setColor(FlatGUI.lookDesign.getColor("label.color.background").darker()); for (int i=0; i