// ============================================================================ // // Copyright (C) 2006-2012 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.repository.preference; import java.util.Collections; import java.util.List; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.talend.repository.i18n.Messages; /** * DOC tguiu class global comment. Detailled comment <br/> * * $Id: StatusDialog.java 77219 2012-01-24 01:14:15Z mhirt $ * */ public class StatusDialog extends Dialog { private String label = ""; //$NON-NLS-1$ private String code = ""; //$NON-NLS-1$ private Button okButton; private Text labelText; private Text codeText; private Label errorMessageText; private boolean creation = false; private final List existingCodes; public StatusDialog(Shell parentShell, List existingCodes) { this(parentShell, existingCodes, null, null); creation = true; } public StatusDialog(Shell parentShell, List existingCodes, String initialCode, String initialLabel) { super(parentShell); this.existingCodes = existingCodes == null ? Collections.EMPTY_LIST : existingCodes; code = initialCode == null ? "" : initialCode; //$NON-NLS-1$ label = initialLabel == null ? "" : initialLabel; //$NON-NLS-1$ } @Override protected void buttonPressed(int buttonId) { if (buttonId == IDialogConstants.OK_ID) { code = codeText.getText(); label = labelText.getText(); } else { code = ""; //$NON-NLS-1$ label = ""; //$NON-NLS-1$ } super.buttonPressed(buttonId); } @Override protected void configureShell(Shell shell) { super.configureShell(shell); if (creation) { shell.setText(Messages.getString("StatusDialog.shellText.createNewStatus")); //$NON-NLS-1$ } else { shell.setText(Messages.getString("StatusDialog.shellText.editStatus")); //$NON-NLS-1$ } } @Override protected void createButtonsForButtonBar(Composite parent) { // create OK and Cancel buttons by default okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); // do this here because setting the text will set enablement on the ok // button if (code != null) { codeText.setText(code); codeText.selectAll(); } if (label != null) { labelText.setText(label); } if (creation) { codeText.setFocus(); } else { codeText.setEnabled(false); labelText.setFocus(); } } /* * (non-Javadoc) Method declared on Dialog. */ @Override protected Control createDialogArea(Composite parent) { // create composite Composite composite = (Composite) super.createDialogArea(parent); // create message // if (message != null) { // Label label = new Label(composite, SWT.WRAP); // label.setText(message); // GridData data = new GridData(GridData.GRAB_HORIZONTAL // | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL // | GridData.VERTICAL_ALIGN_CENTER); // data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); // label.setLayoutData(data); // label.setFont(parent.getFont()); // } GridLayout layout = new GridLayout(); layout.numColumns = 3; composite.setLayout(layout); Label label1 = new Label(composite, SWT.None); label1.setText(Messages.getString("StatusDialog.labelText.code")); //$NON-NLS-1$ // label.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); GridData data = new GridData(GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER); label1.setLayoutData(data); label1.setFont(parent.getFont()); codeText = new Text(composite, SWT.SINGLE | SWT.BORDER); data = new GridData(); data.widthHint = convertHorizontalDLUsToPixels(30); codeText.setLayoutData(data); codeText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { validateInput(); } }); label1 = new Label(composite, SWT.WRAP); data = new GridData(GridData.FILL_HORIZONTAL); label1.setLayoutData(data); label1 = new Label(composite, SWT.WRAP); label1.setText(Messages.getString("StatusDialog.labelText.label")); //$NON-NLS-1$ label1.setFont(parent.getFont()); labelText = new Text(composite, SWT.SINGLE | SWT.BORDER); data = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); data.horizontalSpan = 2; labelText.setLayoutData(data); labelText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { validateInput(); } }); errorMessageText = new Label(composite, SWT.NONE); errorMessageText.setLayoutData(data); errorMessageText.setBackground(errorMessageText.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); applyDialogFont(composite); return composite; } protected Button getOkButton() { return okButton; } protected void validateInput() { String errorMessage = null; if (creation && codeText.getText().length() != 3) { errorMessage = Messages.getString("StatusDialog.errorMessage.codeLetters"); //$NON-NLS-1$ } else if (creation && existingCodes.contains(codeText.getText())) { errorMessage = Messages.getString("StatusDialog.errorMessage.codeUsed"); //$NON-NLS-1$ } else if (labelText.getText().equals("")) { //$NON-NLS-1$ errorMessage = "Label cannot be empty."; //$NON-NLS-1$ } setErrorMessage(errorMessage); } public void setErrorMessage(String errorMessage) { if (errorMessageText != null && !errorMessageText.isDisposed()) { errorMessageText.setText(errorMessage == null ? "" : errorMessage); //$NON-NLS-1$ errorMessageText.getParent().update(); // Access the ok button by id, in case clients have overridden button creation. // See https://bugs.eclipse.org/bugs/show_bug.cgi?id=113643 Control button = getButton(IDialogConstants.OK_ID); if (button != null) { button.setEnabled(errorMessage == null); } } } /** * Getter for code. * * @return the code */ public String getCode() { return this.code; } /** * Getter for label. * * @return the label */ public String getLabel() { return this.label; } }