/******************************************************************************
* Copyright (c) 2011 GitHub Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Kevin Sawicki (GitHub Inc.) - initial API and implementation
*****************************************************************************/
package org.eclipse.egit.ui.internal.commit;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.egit.ui.internal.dialogs.SpellcheckableMessageArea;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.IDetailsPage;
import org.eclipse.ui.forms.IDetailsPageProvider;
import org.eclipse.ui.forms.IFormPart;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
/**
* Note details page that display the text content of a note in a
* {@link StyledText} widget.
*/
public class NoteDetailsPage implements IDetailsPage, IDetailsPageProvider {
private SpellcheckableMessageArea notesText;
private FormToolkit toolkit;
private RepositoryCommitNote selectedNote;
@Override
public void initialize(IManagedForm form) {
toolkit = form.getToolkit();
}
@Override
public void dispose() {
// Does nothing
}
@Override
public boolean isDirty() {
return false;
}
@Override
public void commit(boolean onSave) {
// Update notes not currently supported
}
@Override
public boolean setFormInput(Object input) {
return true;
}
@Override
public void setFocus() {
notesText.setFocus();
}
@Override
public boolean isStale() {
return false;
}
@Override
public void refresh() {
if (selectedNote != null)
notesText.setText(selectedNote.getNoteText());
else
notesText.setText(""); //$NON-NLS-1$
}
@Override
public void selectionChanged(IFormPart part, ISelection selection) {
Object first = ((IStructuredSelection) selection).getFirstElement();
if (first instanceof RepositoryCommitNote)
selectedNote = (RepositoryCommitNote) first;
else
selectedNote = null;
refresh();
}
@Override
public void createContents(Composite parent) {
GridLayoutFactory.swtDefaults().applyTo(parent);
Section notesSection = toolkit.createSection(parent,
ExpandableComposite.TITLE_BAR);
notesSection.setText(UIText.NoteDetailsPage_ContentSection);
GridDataFactory.fillDefaults().grab(true, true).applyTo(notesSection);
Composite notesArea = toolkit.createComposite(notesSection);
toolkit.paintBordersFor(notesArea);
notesSection.setClient(notesArea);
GridLayoutFactory.fillDefaults().extendedMargins(2, 2, 2, 2)
.applyTo(notesArea);
notesText = new SpellcheckableMessageArea(notesArea, "", SWT.NONE) { //$NON-NLS-1$
@Override
protected void createMarginPainter() {
// Disabled intentionally
}
};
notesText.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
StyledText text = notesText.getTextWidget();
text.setEditable(false);
text.setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
text.setForeground(text.getDisplay().getSystemColor(
SWT.COLOR_INFO_FOREGROUND));
text.setBackground(text.getDisplay().getSystemColor(
SWT.COLOR_INFO_BACKGROUND));
GridDataFactory.fillDefaults().grab(true, true).applyTo(notesText);
}
@Override
public Object getPageKey(Object object) {
return this;
}
@Override
public IDetailsPage getPage(Object key) {
return this;
}
}