package org.xmind.ui.internal.views; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.xmind.core.IMeta; public class AuthorInfoInspectorSection extends InspectorSection { private class AuthorInfoNameViewer extends AuthorInfoViewer { public AuthorInfoNameViewer(Composite parent) { super(parent); } @Override protected void refresh() { AuthorInfoInspectorSection.this.refreshAuthorInfoName(); } @Override protected void changeContent() { String value = getEditor().getInput().getText(); if (value != null && !"".equals(value) //$NON-NLS-1$ && getCurrentWorkbook() != null) getCurrentWorkbook().getMeta().setValue(IMeta.AUTHOR_NAME, value); AuthorInfoInspectorSection.this.refreshAuthorInfoName(); } } private class AuthorInfoEmailViewer extends AuthorInfoViewer { public AuthorInfoEmailViewer(Composite parent) { super(parent); } @Override protected void refresh() { AuthorInfoInspectorSection.this.refreshAuthorInfoEmail(); } @Override protected void changeContent() { String value = getEditor().getInput().getText(); if (value != null && getCurrentWorkbook() != null) getCurrentWorkbook().getMeta().setValue(IMeta.AUTHOR_EMAIL, value); AuthorInfoInspectorSection.this.refreshAuthorInfoEmail(); } } private class AuthorInfoOrganizationViewer extends AuthorInfoViewer { public AuthorInfoOrganizationViewer(Composite parent) { super(parent); } @Override protected void refresh() { AuthorInfoInspectorSection.this.refreshAuthorInfoOrg(); reflow(); } @Override protected void changeContent() { String value = getEditor().getInput().getText(); if (value != null && getCurrentWorkbook() != null) getCurrentWorkbook().getMeta().setValue(IMeta.AUTHOR_ORG, value); AuthorInfoInspectorSection.this.refreshAuthorInfoOrg(); reflow(); } } private AuthorInfoNameViewer nameViewer; private AuthorInfoEmailViewer emailViewer; private AuthorInfoOrganizationViewer organizationViewer; private Color invalidColor; private Color validColor; public AuthorInfoInspectorSection() { setTitle(Messages.AuthorInfoInspectorSection_title); } @Override protected Composite createContent(Composite parent) { invalidColor = parent.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY); validColor = parent.getDisplay().getSystemColor(SWT.COLOR_BLACK); Composite composite = super.createContent(parent); createNameItem(composite); createEmailItem(composite); createOrganizationItem(composite); return composite; } private void createNameItem(Composite parent) { Composite item = getItemComposite(parent); Label label = new Label(item, SWT.NONE); label.setText(Messages.AuthorInfoInspectorSection_Name); nameViewer = new AuthorInfoNameViewer(item); nameViewer.setEnabled(true); fillViewerContent(nameViewer, getCurrentWorkbook().getMeta(), IMeta.AUTHOR_NAME, Messages.AuthorInfoInspectorSection_Enter_Name); } private void createEmailItem(Composite parent) { Composite item = getItemComposite(parent); Label label = new Label(item, SWT.NONE); label.setText(Messages.AuthorInfoInspectorSection_Email); emailViewer = new AuthorInfoEmailViewer(item); emailViewer.setEnabled(true); fillViewerContent(emailViewer, getCurrentWorkbook().getMeta(), IMeta.AUTHOR_EMAIL, Messages.AuthorInfoInspectorSection_Enter_Email); } private void createOrganizationItem(Composite parent) { Composite item = getItemComposite(parent); Label label = new Label(item, SWT.NONE); label.setText(Messages.AuthorInfoInspectorSection_Organization); organizationViewer = new AuthorInfoOrganizationViewer(item); organizationViewer.setEnabled(true); fillViewerContent(organizationViewer, getCurrentWorkbook().getMeta(), IMeta.AUTHOR_ORG, Messages.AuthorInfoInspectorSection_Enter_Organization); } private void fillViewerContent(AuthorInfoViewer viewer, IMeta meta, String key, String enterLabel) { String value = meta.getValue(key); viewer.getEditor().getButton().setTextForeground( isContentEmpty(value) ? invalidColor : validColor); String text = null; if (!isContentEmpty(value)) { viewer.getEditor().getInput().setText(value); text = value; } else { viewer.getEditor().getInput().setText(""); //$NON-NLS-1$ text = enterLabel; } viewer.getEditor().getButton().setText(text); viewer.getDisplay().setText(text); } private Composite getItemComposite(Composite parent) { Composite item = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(2, false); layout.marginHeight = 0; layout.marginWidth = 0; item.setLayout(layout); item.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); return item; } private boolean isContentEmpty(String content) { return content == null || "".equals(content); //$NON-NLS-1$ } public void refreshAuthorInfoName() { if (nameViewer != null && getCurrentWorkbook() != null) fillViewerContent(nameViewer, getCurrentWorkbook().getMeta(), IMeta.AUTHOR_NAME, Messages.AuthorInfoInspectorSection_Enter_Name); } public void refreshAuthorInfoEmail() { if (emailViewer != null && getCurrentWorkbook() != null) fillViewerContent(emailViewer, getCurrentWorkbook().getMeta(), IMeta.AUTHOR_EMAIL, Messages.AuthorInfoInspectorSection_Enter_Email); } public void refreshAuthorInfoOrg() { if (organizationViewer != null && getCurrentWorkbook() != null) fillViewerContent(organizationViewer, getCurrentWorkbook().getMeta(), IMeta.AUTHOR_ORG, Messages.AuthorInfoInspectorSection_Enter_Organization); } public Color getInvalidColor() { return invalidColor; } public void setInvalidColor(Color invalidColor) { this.invalidColor = invalidColor; } public Color getValidColor() { return validColor; } public void setValidColor(Color validColor) { this.validColor = validColor; } @Override protected void handleDispose() { if (invalidColor != null && !invalidColor.isDisposed()) { invalidColor.dispose(); invalidColor = null; } if (validColor != null && !validColor.isDisposed()) { validColor.dispose(); validColor = null; } } @Override protected void refreshAuthorInfo() { if (getCurrentWorkbook() != null) { refreshAuthorInfoName(); refreshAuthorInfoEmail(); refreshAuthorInfoOrg(); } } }