package it.albertus.cycles.gui;
import org.eclipse.jface.resource.FontRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import it.albertus.cycles.gui.FormProperty.TextDataKey;
public class TextFormatter {
private static final String FONT_KEY = "it.albertus.jface.font.property";
private static final char SAMPLE_CHAR = '9';
private final CyclesModGui gui;
private final FontRegistry fontRegistry;
TextFormatter(final CyclesModGui gui) {
this.gui = gui;
this.fontRegistry = JFaceResources.getFontRegistry();
}
public void clean(final Text text) {
if (text != null) {
String textValue = text.getText().trim();
if (gui.isNumeric(textValue)) {
final int actualValue = Integer.parseInt(textValue, gui.getNumeralSystem().getRadix());
final Integer maxValue = (Integer) text.getData(TextDataKey.MAX.toString());
if (maxValue != null && actualValue > maxValue.intValue()) {
textValue = Integer.toString(maxValue, gui.getNumeralSystem().getRadix());
}
else {
textValue = Integer.toString(Integer.parseInt(textValue, gui.getNumeralSystem().getRadix()), gui.getNumeralSystem().getRadix());
}
}
else {
textValue = "0";
}
if (!text.getText().equals(textValue)) {
text.setText(textValue);
}
}
}
public void updateFontStyle(final Text text) {
if (text != null && gui.isNumeric(text.getText()) && text.getFont() != null && text.getFont().getFontData() != null && text.getFont().getFontData().length > 0 && text.getData(FormProperty.TextDataKey.DEFAULT.toString()) instanceof Integer) {
final Integer defaultValue = (Integer) text.getData(FormProperty.TextDataKey.DEFAULT.toString());
if (!defaultValue.equals(Integer.valueOf(text.getText(), gui.getNumeralSystem().getRadix()))) {
if (text.getFont().getFontData()[0].getStyle() != SWT.BOLD) {
setBoldFontStyle(text);
}
}
else {
if (text.getFont().getFontData()[0].getStyle() != SWT.NORMAL) {
setNormalFontStyle(text);
}
}
}
}
/** Consente la determinazione automatica della larghezza del campo. */
public void setSampleNumber(final Text text) {
if (text != null && text.getData(TextDataKey.SIZE.toString()) instanceof Integer) {
final int size = (Integer) text.getData(TextDataKey.SIZE.toString());
final char[] sample = new char[size];
for (int i = 0; i < size; i++) {
sample[i] = SAMPLE_CHAR;
}
if (text.getTextLimit() < size) {
text.setTextLimit(size);
}
text.setText(String.valueOf(sample));
setBoldFontStyle(text);
}
}
public void setNormalFontStyle(final Control control) {
if (!fontRegistry.hasValueFor(FONT_KEY)) {
fontRegistry.put(FONT_KEY, control.getFont().getFontData());
}
control.setFont(fontRegistry.get(FONT_KEY));
}
public void setBoldFontStyle(final Control control) {
if (!fontRegistry.hasValueFor(FONT_KEY)) {
fontRegistry.put(FONT_KEY, control.getFont().getFontData());
}
control.setFont(fontRegistry.getBold(FONT_KEY));
}
}