package com.weecode.plugin.comics.ui.views; import java.util.ArrayList; import java.util.List; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.beans.BeansObservables; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.core.databinding.observable.map.IObservableMap; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.ViewPart; import com.weecode.plugin.comics.model.TitlesModel; import com.weecode.plugin.comics.model.eo.Publisher; import com.weecode.plugin.comics.model.eo.Title; import com.weecode.plugin.comics.ui.editors.TitleEditorInput; import com.weecode.plugin.comics.ui.editors.TitleEditor; /** * * @author Jason Kusnier and Tim Hollosy * */ public class TitleView extends ViewPart { private DataBindingContext m_bindingContext; private Action refreshAction; private Action initAction; public static final String ID = "com.weecode.plugin.comics.ui.views.TitleView"; //$NON-NLS-1$ private TableViewer tableViewer; private Table table; private TitlesModel model = null; private Display display; private List titles = new ArrayList<Title>(); private WritableList titlesWritableList; class ViewLablProvider implements ITableLabelProvider { @Override public Image getColumnImage(Object element, int columnIndex) { return null; } @Override public String getColumnText(Object element, int columnIndex) { return ((Publisher)element).getName(); } @Override public void addListener(ILabelProviderListener listener) { } @Override public void dispose() { } @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public void removeListener(ILabelProviderListener listener) { } } @Override public void dispose() { if (model != null) model.close(); super.dispose(); } /** * Create contents of the view part * @param parent */ @Override public void createPartControl(Composite parent) { this.display = parent.getDisplay(); Composite container = new Composite(parent, SWT.NONE); container.setLayout(new FillLayout()); tableViewer = new TableViewer(container, SWT.VIRTUAL | SWT.FULL_SELECTION | SWT.BORDER); tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setLabelProvider(new ViewLablProvider()); table = tableViewer.getTable(); table.setLinesVisible(true); table.setHeaderVisible(true); final TableColumn newColumnTableColumn = new TableColumn(table, SWT.NONE); newColumnTableColumn.setWidth(100); newColumnTableColumn.setText("Name"); final TableColumn newColumnTableColumn_1 = new TableColumn(table, SWT.NONE); newColumnTableColumn_1.setWidth(100); newColumnTableColumn_1.setText("Format"); final TableColumn newColumnTableColumn_2 = new TableColumn(table, SWT.NONE); newColumnTableColumn_2.setWidth(100); newColumnTableColumn_2.setText("Publisher"); tableViewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { IStructuredSelection sel = (IStructuredSelection)event.getSelection(); Title title = (Title)sel.getFirstElement(); TitleEditorInput input = new TitleEditorInput(title,model.getPublishers()); try { getSite().getPage().openEditor(input, TitleEditor.ID); } catch (PartInitException e) { e.printStackTrace(); } } }); createActions(); initializeToolBar(); initializeMenu(); initAction.run(); } /** * Create the actions */ private void createActions() { initAction = new Action("Init") { @Override public void run() { Job job = new Job("Init View...") { @Override protected IStatus run(IProgressMonitor monitor) { model = new TitlesModel(); titles = model.getTitles(); display.syncExec(new Runnable() { @Override public void run() { m_bindingContext = initDataBindings(); } }); return Status.OK_STATUS; } }; job.schedule(); } }; refreshAction = new Action("Refresh") { @Override public void run() { Job job = new Job("Init View...") { @Override protected IStatus run(IProgressMonitor monitor) { model.refresh(); titles = model.getTitles(); display.syncExec(new Runnable() { @Override public void run() { tableViewer.refresh(); } }); return Status.OK_STATUS; } }; job.schedule(); } }; // Create the actions } /** * Initialize the toolbar */ private void initializeToolBar() { IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager(); toolbarManager.add(refreshAction); } /** * Initialize the menu */ private void initializeMenu() { IMenuManager menuManager = getViewSite().getActionBars().getMenuManager(); } @Override public void setFocus() { // Set the focus } protected DataBindingContext initDataBindings() { // ObservableListContentProvider tableViewerContentProviderList = new ObservableListContentProvider(); tableViewer.setContentProvider(tableViewerContentProviderList); // IObservableMap[] tableViewerLabelProviderMaps = BeansObservables.observeMaps(tableViewerContentProviderList.getKnownElements(), Title.class, new String[]{"format", "name", "publisher"}); tableViewer.setLabelProvider(new ObservableMapLabelProvider(tableViewerLabelProviderMaps)); titlesWritableList = new WritableList(titles, Title.class); tableViewer.setInput(titlesWritableList); // DataBindingContext bindingContext = new DataBindingContext(); // // return bindingContext; } }