package art.client.GUI.components.devices.window.colors.rtz32.configuration.components; import art.library.gui.flat.FlatButton; import art.library.gui.flat.FlatPanel; import art.library.gui.flat.FlatSplitPane; import art.library.gui.flat.FlatTabbedPane; import art.library.gui.flat.FlatTableInput; import art.library.gui.flat.FlatTextField; import art.library.interop.serialization.Serialization; import art.library.model.devices.colors.controller.RTZ32.configuration.RTZ32_Configuration; import art.library.model.devices.colors.controller.RTZ32.configuration.RTZ32_Configuration_Program; import art.library.model.devices.colors.controller.RTZ32.types.RTZ32_Distribution; import art.servers.Shared; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; 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.geom.Rectangle2D; import java.util.ArrayList; import java.util.List; import javax.swing.JSplitPane; public class Diagram_Distribution extends FlatPanel { private RTZ32_Configuration configurationOriginal = null; private RTZ32_Configuration configuration = null; protected RTZ32_Distribution distribution = null; private FlatTableInput table1 = null; public Diagram_Distribution_Bars diagram_Distribution_Bars = null; public Diagram_Distribution_Impulses diagram_Distribution_Impulses = null; public Diagram_Distribution_Times diagram_Distribution_Times = null; public Diagram_Distribution_Types diagram_Distribution_Types = null; private int programNumber = 0; private List historical = new ArrayList(); private int currentHistoricalPosition = 0; private Diagram_Distribution_ChangeListener changeListener = null; public Diagram_Distribution(RTZ32_Configuration configuration, int programNumber) { this.configurationOriginal = configuration; this.configuration = configuration; this.programNumber = programNumber; try { this.configurationOriginal = Serialization.clone(configuration); } catch (Exception exception) { } initialise(); } public void setChangeListener(Diagram_Distribution_ChangeListener changeListener) { this.changeListener = changeListener; } public void reevaluate() { RTZ32_Configuration_Program program = configuration.getProgram(programNumber); distribution.revaluate(configuration); diagram_Distribution_Times.reevaluate(); diagram_Distribution_Impulses.reevaluate(); diagram_Distribution_Types.reevaluate(); table1.setValue(Shared.getMessage("Cycle"), program.cycle); table1.setValue(Shared.getMessage("Offset"), program.offset); table1.setValueIndex(Shared.getMessage("Groups"), configuration.getNumberValidGroups()); repaint(); } private FlatButton buttonUndo = null; private FlatButton buttonRedo = null; public void setButtons(FlatButton buttonUndo, FlatButton buttonRedo) { this.buttonUndo = buttonUndo; this.buttonRedo = buttonRedo; } public void changeMade() { try { if (Serialization.equals(configurationOriginal, configuration) == false) { historical = historical.subList(0, currentHistoricalPosition); historical.add(configurationOriginal); this.configurationOriginal = Serialization.clone(configuration); if (historical.size() > 50) historical.remove(0); currentHistoricalPosition = historical.size(); } } catch (Exception exception) { } if (buttonUndo != null) buttonUndo.setEnabled(currentHistoricalPosition > 0); if (buttonRedo != null) buttonRedo.setEnabled(currentHistoricalPosition < (historical.size()-1)); if (changeListener != null) changeListener.changeMade(); } public void undo() { try { if (currentHistoricalPosition == 0) return; if (currentHistoricalPosition == historical.size()) { if (Serialization.equals(historical.get(currentHistoricalPosition-1), configuration) == false) { historical.add(Serialization.clone(configuration)); } } configuration.copyfrom(historical.get(currentHistoricalPosition-1)); currentHistoricalPosition = currentHistoricalPosition - 1; distribution.setConfiguration(configuration); configurationOriginal = Serialization.clone(configuration); reevaluate(); } catch (Exception exception) { } if (buttonUndo != null) buttonUndo.setEnabled(currentHistoricalPosition > 0); if (buttonRedo != null) buttonRedo.setEnabled(currentHistoricalPosition < (historical.size()-1)); } public void redo() { if (currentHistoricalPosition >= (historical.size())) return; configuration.copyfrom(historical.get(currentHistoricalPosition+1)); currentHistoricalPosition = currentHistoricalPosition + 1; distribution.setConfiguration(configuration); configurationOriginal = Serialization.clone(configuration); reevaluate(); if (buttonUndo != null) buttonUndo.setEnabled(currentHistoricalPosition > 0); if (buttonRedo != null) buttonRedo.setEnabled(currentHistoricalPosition < (historical.size()-1)); } private void initialise() { RTZ32_Configuration_Program program = configuration.getProgram(programNumber); FlatSplitPane flatSplitPane1 = new FlatSplitPane(); { distribution = new RTZ32_Distribution(configuration, programNumber); diagram_Distribution_Bars = new Diagram_Distribution_Bars(configuration, programNumber, this); diagram_Distribution_Bars.setMinimumSize(new Dimension(0,0)); diagram_Distribution_Bars.setPreferredSize(new Dimension(0,0)); FlatPanel panel1 = new FlatPanel(); { table1 = new FlatTableInput(150); { Object[] GROUPS = new Integer[32+1]; for (int i=0; i<=32; i++) GROUPS[i] = i; table1.addNumericTextField(Shared.getMessage("Cycle"), 0, 512, 21); table1.addNumericTextField(Shared.getMessage("Offset"), 0, 512, 21); table1.addComboBox(Shared.getMessage("Groups"), GROUPS, 22); table1.setValue(Shared.getMessage("Cycle"), program.cycle); table1.setValue(Shared.getMessage("Offset"), program.offset); table1.setValueIndex(Shared.getMessage("Groups"), configuration.getNumberValidGroups()); FlatTextField flatTextField = (FlatTextField)table1.getComponentValue("Offset"); flatTextField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { FlatTextField flatTextField = (FlatTextField)e.getSource(); changeOffset(Integer.parseInt(flatTextField.getText())); } catch (Exception exception) { } } }); table1.setField(Shared.getMessage("Groups"), this, "changeTotalGroups"); table1.revalidate(); table1.setEditable(false); } FlatTabbedPane flatTabbed1 = new FlatTabbedPane(); { diagram_Distribution_Impulses = new Diagram_Distribution_Impulses(configuration, programNumber, distribution); diagram_Distribution_Impulses.setDiagram(diagram_Distribution_Bars); diagram_Distribution_Times = new Diagram_Distribution_Times(configuration, programNumber, this); diagram_Distribution_Types = new Diagram_Distribution_Types(configuration, programNumber, this); flatTabbed1.addTab(Shared.getMessage("Impulses"), diagram_Distribution_Impulses); flatTabbed1.addTab(Shared.getMessage("Time distribution"), diagram_Distribution_Times); flatTabbed1.addTab(Shared.getMessage("Groups types"), diagram_Distribution_Types); flatTabbed1.allowTitleChange(false); } panel1.setLayout(new BorderLayout()); panel1.add(table1.getScrollPane(), BorderLayout.NORTH); panel1.add(flatTabbed1, BorderLayout.CENTER); panel1.setMinimumSize(new Dimension(0,0)); panel1.setPreferredSize(new Dimension(425,0)); } flatSplitPane1.setOrientation(JSplitPane.HORIZONTAL_SPLIT); flatSplitPane1.setOneTouchExpandable(); flatSplitPane1.changeDividerSize(16); flatSplitPane1.setLeftComponent(diagram_Distribution_Bars); flatSplitPane1.setRightComponent(panel1); flatSplitPane1.addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { FlatSplitPane flatSplitPane1 = (FlatSplitPane)e.getSource(); flatSplitPane1.setDividerLocation(getWidth()-425); diagram_Distribution_Bars.repaint(); } }); diagram_Distribution_Bars.addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { diagram_Distribution_Bars.repaint(); } }); } this.setLayout(new BorderLayout()); this.add(flatSplitPane1, BorderLayout.CENTER); } public void editable(boolean value) { table1.setEditable(value); table1.setEditable(Shared.getMessage("Cycle"), false); if (diagram_Distribution_Impulses != null) diagram_Distribution_Impulses.editable(value); if (diagram_Distribution_Times != null) diagram_Distribution_Times.editable(value); if (diagram_Distribution_Types != null) diagram_Distribution_Types.editable(value); if (diagram_Distribution_Bars != null) diagram_Distribution_Bars.editable(value); } private void changeOffset(int value) { RTZ32_Configuration_Program program = configuration.getProgram(programNumber); program.offset = value; changeMade(); } private void changeTotalGroups(int total) { for (int i=total; i