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<RTZ32_Configuration> historical = new ArrayList<RTZ32_Configuration>();
|
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<configuration.groups.length; i++)
|
{
|
RTZ32_Configuration_Program program = configuration.getProgram(programNumber);
|
configuration.groups[i].clear();
|
program.groups[i].clear();
|
}
|
|
for (int i=configuration.getNumberValidGroups(); i<total; i++)
|
{
|
RTZ32_Configuration_Program program = configuration.getProgram(programNumber);
|
configuration.groups[i].factoryDefault();
|
program.groups[i].factoryDefault();
|
}
|
|
reevaluate();
|
changeMade();
|
}
|
|
|
|
|
|
protected static 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);
|
}
|
catch (Exception e)
|
{
|
}
|
}
|
|
|
|
protected static void drawRightString(Graphics2D g2, String text, Rectangle2D rect, Font font)
|
{
|
FontMetrics metrics = g2.getFontMetrics(font);
|
double x = rect.getX() + (rect.getWidth() - (metrics.stringWidth(text))) - 5;
|
double y = rect.getY() + ((rect.getHeight() - metrics.getHeight()) / 2) + metrics.getAscent();
|
g2.setFont(font);
|
g2.drawString(text, (float)x, (float)y);
|
}
|
|
|
|
protected static void drawRightString(Graphics2D g2, String text, double x, double y)
|
{
|
FontMetrics metrics = g2.getFontMetrics();
|
g2.drawString(text, (float)x - metrics.stringWidth(text), (float)(y + metrics.getAscent()));
|
}
|
|
|
protected static void drawLeftString(Graphics2D g2, String text, Rectangle2D rect, Font font)
|
{
|
FontMetrics metrics = g2.getFontMetrics(font);
|
double x = rect.getX();
|
double y = rect.getY() + ((rect.getHeight() - metrics.getHeight()) / 2) + metrics.getAscent();
|
g2.setFont(font);
|
g2.drawString(text, (float)x, (float)y);
|
}
|
|
protected static void drawLeftString(Graphics2D g2, String text, double x, double y)
|
{
|
FontMetrics metrics = g2.getFontMetrics();
|
g2.drawString(text, (float)x , (float)(y + metrics.getAscent()));
|
}
|
|
protected static void drawCenteredString(Graphics2D g2, String text, double x, double y)
|
{
|
FontMetrics metrics = g2.getFontMetrics();
|
g2.drawString(text, (float)x - (metrics.stringWidth(text)/2), (float)(y + metrics.getAscent()));
|
}
|
|
|
protected static 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);
|
}
|
|
|
|
|
protected static int getNumberBars(RTZ32_Configuration configuration)
|
{
|
int result = configuration.groups.length;
|
result = result + (configuration.getGroupType(20).size() * 3);
|
return result;
|
}
|
|
|
|
}
|