/****************************************************************************** * 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 java.text.MessageFormat; import org.eclipse.egit.ui.internal.UIText; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.forms.DetailsPart; import org.eclipse.ui.forms.IFormPart; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.MasterDetailsBlock; import org.eclipse.ui.forms.SectionPart; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.model.WorkbenchLabelProvider; /** * Notes master details block class. */ public class NotesBlock extends MasterDetailsBlock { private RepositoryCommit commit; private IManagedForm form; private IFormPart part; private TableViewer refsViewer; /** * Create notes block * * @param commit */ public NotesBlock(RepositoryCommit commit) { this.commit = commit; } @Override public void createContent(IManagedForm managedForm, Composite parent) { super.createContent(managedForm, parent); sashForm.setWeights(new int[] { 25, 75 }); } @Override protected void createMasterPart(final IManagedForm managedForm, Composite parent) { form = managedForm; FormToolkit toolkit = managedForm.getToolkit(); Composite masterArea = toolkit.createComposite(parent); GridLayoutFactory.swtDefaults().applyTo(masterArea); RepositoryCommitNote[] notes = commit.getNotes(); Section refsSection = toolkit.createSection(masterArea, ExpandableComposite.TITLE_BAR); refsSection.setText(MessageFormat.format( UIText.NotesBlock_NotesSection, Integer.valueOf(notes.length))); GridDataFactory.fillDefaults().grab(true, true).applyTo(refsSection); Composite refsArea = toolkit.createComposite(refsSection); refsSection.setClient(refsArea); GridLayoutFactory.fillDefaults().extendedMargins(2, 2, 2, 2) .applyTo(refsArea); toolkit.paintBordersFor(refsArea); Table refsTable = toolkit.createTable(refsArea, SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE); refsViewer = new TableViewer(refsTable); refsViewer.setComparator(new ViewerComparator()); refsTable.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TREE_BORDER); GridDataFactory.fillDefaults().grab(true, true).applyTo(refsTable); refsViewer.setContentProvider(ArrayContentProvider.getInstance()); refsViewer.setLabelProvider(new WorkbenchLabelProvider()); refsViewer.setInput(notes); part = new SectionPart(refsSection); refsViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { managedForm.fireSelectionChanged(part, event.getSelection()); } }); } @Override protected void registerPages(DetailsPart dPart) { dPart.setPageProvider(new NoteDetailsPage()); } @Override protected void createToolBarActions(IManagedForm managedForm) { // No toolbar actions add by this block } /** * Select first note ref in table */ public void selectFirstNote() { if (refsViewer.getTable().getItemCount() > 0) { refsViewer.getTable().setSelection(0); form.fireSelectionChanged(part, refsViewer.getSelection()); } } }