package org.insightech.er.common.widgets;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.nio.charset.Charset;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Scale;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.insightech.er.ResourceString;
import org.insightech.er.Resources;
import org.insightech.er.common.dialog.AbstractDialog;
public class CompositeFactory {
public static SpinnerWithScale createSpinnerWithScale(
AbstractDialog dialog, Composite composite, String title,
int minimum, int maximum) {
return createSpinnerWithScale(dialog, composite, title, "%", minimum,
maximum);
}
public static SpinnerWithScale createSpinnerWithScale(
AbstractDialog dialog, Composite composite, String title,
String unit, int minimum, int maximum) {
if (title != null) {
Label label = new Label(composite, SWT.RIGHT);
label.setText(ResourceString.getResourceString(title));
}
GridData scaleGridData = new GridData();
final Scale scale = new Scale(composite, SWT.NONE);
scale.setLayoutData(scaleGridData);
int diff = 0;
if (minimum < 0) {
scale.setMinimum(0);
scale.setMaximum(-minimum + maximum);
diff = minimum;
} else {
scale.setMinimum(minimum);
scale.setMaximum(maximum);
}
scale.setPageIncrement((maximum - minimum) / 10);
GridData spinnerGridData = new GridData();
Spinner spinner = new Spinner(composite, SWT.RIGHT | SWT.BORDER);
spinner.setLayoutData(spinnerGridData);
spinner.setMinimum(minimum);
spinner.setMaximum(maximum);
Label label = new Label(composite, SWT.NONE);
label.setText(unit);
ListenerAppender.addModifyListener(scale, spinner, diff, dialog);
return new SpinnerWithScale(spinner, scale, diff);
}
public static Combo createReadOnlyCombo(AbstractDialog dialog,
Composite composite, String title) {
return createReadOnlyCombo(dialog, composite, title, 1, -1);
}
public static Combo createReadOnlyCombo(AbstractDialog dialog,
Composite composite, String title, int span, int width) {
if (title != null) {
Label label = new Label(composite, SWT.RIGHT);
label.setText(ResourceString.getResourceString(title));
}
GridData gridData = new GridData();
gridData.horizontalSpan = span;
if (width > 0) {
gridData.widthHint = width;
} else {
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
}
Combo combo = new Combo(composite, SWT.READ_ONLY);
combo.setLayoutData(gridData);
ListenerAppender.addComboListener(combo, dialog, false);
return combo;
}
public static Combo createCombo(AbstractDialog dialog, Composite composite,
String title, int span) {
if (title != null) {
Label label = new Label(composite, SWT.RIGHT);
label.setText(ResourceString.getResourceString(title));
}
GridData gridData = new GridData();
gridData.horizontalSpan = span;
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
Combo combo = new Combo(composite, SWT.NONE);
combo.setLayoutData(gridData);
ListenerAppender.addComboListener(combo, dialog, false);
return combo;
}
public static Combo createFileEncodingCombo(IEditorPart editorPart,
AbstractDialog dialog, Composite composite, String title, int span) {
Combo fileEncodingCombo = createReadOnlyCombo(dialog, composite, title,
span, -1);
for (Charset charset : Charset.availableCharsets().values()) {
fileEncodingCombo.add(charset.displayName());
}
IFile file = ((IFileEditorInput) editorPart.getEditorInput()).getFile();
IProject project = file.getProject();
try {
Charset defautlCharset = Charset.forName(project
.getDefaultCharset());
fileEncodingCombo.setText(defautlCharset.displayName());
} catch (CoreException e) {
}
return fileEncodingCombo;
}
public static Text createText(AbstractDialog dialog, Composite composite,
String title, boolean imeOn) {
return createText(dialog, composite, title, 1, imeOn);
}
public static Text createText(AbstractDialog dialog, Composite composite,
String title, int span, boolean imeOn) {
return createText(dialog, composite, title, span, -1, imeOn);
}
public static Text createText(AbstractDialog dialog, Composite composite,
String title, int span, int width, boolean imeOn) {
return createText(dialog, composite, title, span, width, SWT.BORDER,
imeOn);
}
public static Text createNumText(AbstractDialog dialog,
Composite composite, String title) {
return createNumText(dialog, composite, title, -1);
}
public static Text createNumText(AbstractDialog dialog,
Composite composite, String title, int width) {
return createNumText(dialog, composite, title, 1, width);
}
public static Text createNumText(AbstractDialog dialog,
Composite composite, String title, int span, int width) {
return createText(dialog, composite, title, span, width, SWT.BORDER
| SWT.RIGHT, false);
}
public static Text createText(AbstractDialog dialog, Composite composite,
String title, int span, int width, int style, boolean imeOn) {
if (title != null) {
Label label = new Label(composite, SWT.NONE);
label.setText(ResourceString.getResourceString(title));
}
GridData textGridData = new GridData();
textGridData.horizontalSpan = span;
if (width > 0) {
textGridData.widthHint = width;
} else {
textGridData.horizontalAlignment = GridData.FILL;
textGridData.grabExcessHorizontalSpace = true;
}
Text text = new Text(composite, style);
text.setLayoutData(textGridData);
ListenerAppender.addTextListener(text, dialog, imeOn);
return text;
}
public static Label createExampleLabel(Composite composite, String title) {
return createExampleLabel(composite, title, -1);
}
public static Label createExampleLabel(Composite composite, String title,
int span) {
Label label = new Label(composite, SWT.NONE);
label.setText(ResourceString.getResourceString(title));
if (span > 0) {
GridData gridData = new GridData();
gridData.horizontalSpan = span;
label.setLayoutData(gridData);
}
FontData fontData = Display.getCurrent().getSystemFont().getFontData()[0];
Font font = new Font(Display.getCurrent(), fontData.getName(), 8,
SWT.NORMAL);
label.setFont(font);
return label;
}
public static void filler(Composite composite, int span) {
filler(composite, span, -1);
}
public static void filler(Composite composite, int span, int width) {
GridData gridData = new GridData();
gridData.horizontalSpan = span;
if (width > 0) {
gridData.widthHint = width;
}
Label label = new Label(composite, SWT.NONE);
label.setLayoutData(gridData);
}
public static Label createLabel(Composite composite, String title) {
return createLabel(composite, title, -1);
}
public static Label createLabel(Composite composite, String title, int span) {
return createLabel(composite, title, span, -1);
}
public static Label createLabel(Composite composite, String title,
int span, int width) {
Label label = new Label(composite, SWT.NONE);
label.setText(ResourceString.getResourceString(title));
if (span > 0 || width > 0) {
GridData gridData = new GridData();
if (span > 0) {
gridData.horizontalSpan = span;
}
if (width > 0) {
gridData.widthHint = width;
}
label.setLayoutData(gridData);
}
return label;
}
public static Button createCheckbox(AbstractDialog dialog,
Composite composite, String title) {
return createCheckbox(dialog, composite, title, -1);
}
public static Button createCheckbox(AbstractDialog dialog,
Composite composite, String title, int span) {
Button checkbox = new Button(composite, SWT.CHECK);
checkbox.setText(ResourceString.getResourceString(title));
if (span != -1) {
GridData gridData = new GridData();
gridData.horizontalSpan = span;
checkbox.setLayoutData(gridData);
}
ListenerAppender.addCheckBoxListener(checkbox, dialog);
return checkbox;
}
public static Button createRadio(AbstractDialog dialog,
Composite composite, String title) {
return createRadio(dialog, composite, title, -1);
}
public static Button createRadio(AbstractDialog dialog,
Composite composite, String title, int span) {
Button radio = new Button(composite, SWT.RADIO);
radio.setText(ResourceString.getResourceString(title));
if (span != -1) {
GridData gridData = new GridData();
gridData.horizontalSpan = span;
radio.setLayoutData(gridData);
}
ListenerAppender.addCheckBoxListener(radio, dialog);
return radio;
}
public static Text createTextArea(AbstractDialog dialog,
Composite composite, String title, int width, int height, int span,
boolean selectAll, boolean imeOn) {
if (title != null) {
Label label = new Label(composite, SWT.NONE);
label.setText(ResourceString.getResourceString(title));
}
GridData textAreaGridData = new GridData();
textAreaGridData.heightHint = height;
textAreaGridData.grabExcessHorizontalSpace = true;
textAreaGridData.horizontalSpan = span;
textAreaGridData.horizontalAlignment = GridData.FILL;
textAreaGridData.widthHint = width;
Text text = new Text(composite, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL
| SWT.BORDER);
text.setLayoutData(textAreaGridData);
ListenerAppender.addTextAreaListener(text, dialog, selectAll, imeOn);
return text;
}
public static Text createTextArea(AbstractDialog dialog,
Composite composite, String title, int width, int height, int span,
boolean imeOn) {
return createTextArea(dialog, composite, title, width, height, span,
true, imeOn);
}
public static Table createTable(Composite composite, int height, int span) {
GridData gridData = new GridData();
gridData.horizontalSpan = span;
gridData.heightHint = height;
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
Table table = new Table(composite, SWT.SINGLE | SWT.BORDER
| SWT.FULL_SELECTION);
table.setLayoutData(gridData);
table.setHeaderVisible(true);
table.setLinesVisible(true);
return table;
}
public static TableColumn createTableColumn(Table table, String text,
int width, int style) {
TableColumn tableColumn = new TableColumn(table, style);
tableColumn.setText(ResourceString.getResourceString(text));
tableColumn.setWidth(width);
tableColumn.setAlignment(style);
return tableColumn;
}
public static Button createButton(Composite composite, String text) {
return createButton(composite, text, -1);
}
public static Button createButton(Composite composite, String text, int span) {
GridData gridData = new GridData();
if (span != -1) {
gridData.horizontalSpan = span;
} else {
gridData.widthHint = Resources.BUTTON_WIDTH;
}
Button button = new Button(composite, SWT.NONE);
button.setText(ResourceString.getResourceString(text));
button.setLayoutData(gridData);
return button;
}
public static Button createAddButton(Composite composite) {
GridData gridData = new GridData();
gridData.grabExcessVerticalSpace = true;
gridData.verticalAlignment = GridData.END;
gridData.widthHint = Resources.BUTTON_WIDTH;
Button button = new Button(composite, SWT.NONE);
button.setText(ResourceString.getResourceString("label.right.arrow"));
button.setLayoutData(gridData);
return button;
}
public static Button createRemoveButton(Composite composite) {
GridData gridData = new GridData();
gridData.grabExcessVerticalSpace = true;
gridData.verticalAlignment = GridData.BEGINNING;
gridData.widthHint = Resources.BUTTON_WIDTH;
Button button = new Button(composite, SWT.NONE);
button.setText(ResourceString.getResourceString("label.left.arrow"));
button.setLayoutData(gridData);
return button;
}
public static TableEditor createCheckBoxTableEditor(TableItem tableItem,
boolean selection, int column) {
Table table = tableItem.getParent();
final Button checkBox = new Button(table, SWT.CHECK);
checkBox.pack();
TableEditor editor = new TableEditor(table);
editor.minimumWidth = checkBox.getSize().x;
editor.horizontalAlignment = SWT.CENTER;
editor.setEditor(checkBox, tableItem, column);
checkBox.setSelection(selection);
return editor;
}
public static RowHeaderTable createRowHeaderTable(Composite parent,
int width, int height, int rowHeaderWidth, int rowHeight, int span,
boolean iconEnable, boolean editable) {
Composite composite = new Composite(parent, SWT.EMBEDDED);
GridData gridData = new GridData();
gridData.horizontalSpan = span;
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.heightHint = height;
composite.setLayoutData(gridData);
return createTable(composite, width, height, rowHeaderWidth, rowHeight,
iconEnable, editable);
}
private static RowHeaderTable createTable(Composite composite, int width,
int height, int rowHeaderWidth, int rowHeight, boolean iconEnable,
boolean editable) {
Frame frame = SWT_AWT.new_Frame(composite);
frame.setLayout(new FlowLayout());
Panel panel = new Panel();
panel.setLayout(new FlowLayout());
frame.add(panel);
RowHeaderTable table = new RowHeaderTable(width, height,
rowHeaderWidth, rowHeight, iconEnable, editable);
panel.add(table);
return table;
}
}