package org.xmind.ui.internal.prefs;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
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.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.xmind.core.internal.dom.DOMConstants;
import org.xmind.ui.internal.MindMapUIPlugin;
import org.xmind.ui.preference.PreferenceFieldEditorPageSection;
import org.xmind.ui.prefs.PrefConstants;
public class AuthorInfoPreferenceSection extends
PreferenceFieldEditorPageSection implements IWorkbenchPreferencePage {
private Text nameEditor = null;
private Text emailEditor = null;
private Text organizationEditor = null;
private static final String EMPTY = ""; //$NON-NLS-1$
protected IPreferenceStore doGetPreferenceStore() {
return MindMapUIPlugin.getDefault().getPreferenceStore();
}
@Override
public void init(IWorkbench workbench) {
String name = doGetPreferenceStore()
.getString(PrefConstants.AUTHOR_INFO_NAME);
if (name == null || "".equals(name)) { //$NON-NLS-1$
doGetPreferenceStore().setValue(PrefConstants.AUTHOR_INFO_NAME,
System.getProperty("user.name")); //$NON-NLS-1$
}
}
@Override
protected Control createContents(Composite parent) {
Label descriptionLabel = new Label(parent, SWT.WRAP);
descriptionLabel
.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
GridData data = ((GridData) descriptionLabel.getLayoutData());
data.widthHint = 450;
descriptionLabel.setText(PrefMessages.AuthorInfoPage_Message);
GridLayout layout = (GridLayout) parent.getLayout();
layout.marginLeft = 25;
layout.verticalSpacing = 5;
createNameItem(parent);
createEmailItem(parent);
createOrganizationItem(parent);
return parent;
}
private Composite createNameItem(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
createLabel(composite, PrefMessages.AuthorInfoPage_Name_label);
nameEditor = createEditor(composite, doGetPreferenceStore()
.getString(PrefConstants.AUTHOR_INFO_NAME), false);
return composite;
}
private Composite createEmailItem(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
createLabel(composite, PrefMessages.AuthorInfoPage_Email_label);
emailEditor = createEditor(composite, doGetPreferenceStore()
.getString(PrefConstants.AUTHOR_INFO_EMAIL), true);
return composite;
}
private Composite createOrganizationItem(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
createLabel(composite, PrefMessages.AuthorInfoPage_Organization_label);
organizationEditor = createEditor(composite,
doGetPreferenceStore().getString(PrefConstants.AUTHOR_INFO_ORG),
true);
return composite;
}
private void createLabel(Composite parent, String text) {
Composite composite = new Composite(parent, SWT.NONE);
GridData data = new GridData(SWT.RIGHT, SWT.FILL, false, false);
data.widthHint = 100;
composite.setLayoutData(data);
GridLayoutFactory.fillDefaults().applyTo(composite);
Label label = new Label(composite, SWT.NONE);
label.setText(text);
}
private Text createEditor(Composite parent, String content,
boolean canBeEmpty) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayoutFactory.fillDefaults().applyTo(composite);
final Text editor = new Text(composite, SWT.BORDER | SWT.SINGLE);
GridData data = new GridData(SWT.RIGHT, SWT.FILL, false, false);
data.widthHint = 240;
editor.setLayoutData(data);
if (content != null && !EMPTY.equals(content))
editor.setText(content);
if (!canBeEmpty) {
editor.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
validateLibraryName(editor);
}
public void focusGained(FocusEvent e) {
e.display.asyncExec(new Runnable() {
public void run() {
if (editor.isDisposed())
return;
editor.setSelection(0, editor.getCharCount());
}
});
}
});
editor.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validateLibraryName(editor);
}
});
}
return editor;
}
protected boolean validateLibraryName(Text editor) {
if (EMPTY.equals(editor.getText())) {
setErrorMessage(PrefMessages.PreferencePage_EmptyName_errorMessage);
return false;
} else {
setErrorMessage(null);
return true;
}
}
@Override
public boolean performOk() {
if (!saveLibraryName())
return false;
return true;
}
@Override
protected void performDefaults() {
System.setProperty(DOMConstants.AUTHOR_NAME,
System.getProperty("user.name")); //$NON-NLS-1$
System.setProperty(DOMConstants.AUTHOR_EMAIL, EMPTY);
System.setProperty(DOMConstants.AUTHOR_ORG, EMPTY);
if (nameEditor != null && !nameEditor.isDisposed())
nameEditor.setText(System.getProperty("user.name")); //$NON-NLS-1$
if (emailEditor != null && !emailEditor.isDisposed())
emailEditor.setText(EMPTY);
if (organizationEditor != null && !organizationEditor.isDisposed())
organizationEditor.setText(EMPTY);
doGetPreferenceStore().setValue(PrefConstants.AUTHOR_INFO_NAME,
System.getProperty("user.name")); //$NON-NLS-1$
doGetPreferenceStore().setValue(PrefConstants.AUTHOR_INFO_EMAIL, EMPTY);
doGetPreferenceStore().setValue(PrefConstants.AUTHOR_INFO_ORG, EMPTY);
super.performDefaults();
}
private boolean saveLibraryName() {
if (nameEditor == null || nameEditor.isDisposed())
return true;
if (!validateLibraryName(nameEditor))
return false;
System.setProperty(DOMConstants.AUTHOR_NAME, nameEditor.getText());
System.setProperty(DOMConstants.AUTHOR_EMAIL, emailEditor.getText());
System.setProperty(DOMConstants.AUTHOR_ORG,
organizationEditor.getText());
doGetPreferenceStore().setValue(PrefConstants.AUTHOR_INFO_NAME,
nameEditor.getText());
doGetPreferenceStore().setValue(PrefConstants.AUTHOR_INFO_EMAIL,
emailEditor.getText());
doGetPreferenceStore().setValue(PrefConstants.AUTHOR_INFO_ORG,
organizationEditor.getText());
return true;
}
@Override
protected void createFieldEditors() {
}
}