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();
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;
}
}