package de.urszeidler.shr5.ecp.editor.pages;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.layout.TreeColumnLayout;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
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.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import de.urszeidler.commons.functors.Predicate;
import de.urszeidler.eclipse.shr5.FertigkeitsGruppe;
import de.urszeidler.eclipse.shr5.Quelle;
import de.urszeidler.eclipse.shr5.Shr5Factory;
import de.urszeidler.eclipse.shr5.Shr5Package;
import de.urszeidler.eclipse.shr5.ShrList;
import de.urszeidler.eclipse.shr5.SourceBook;
import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil;
import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager;
import de.urszeidler.shr5.ecp.editor.widgets.BeschreibbarWidget;
import de.urszeidler.shr5.ecp.util.List2TreeContentProvider;
import de.urszeidler.shr5.ecp.util.ShadowrunEditingTools;
public class SourceBookPage extends AbstractShr5Page<SourceBook> {
private SourceBook object;
private EditingDomain editingDomain;
private DataBindingContext m_bindingContext;
/**
* Create the form page.
*
* @param id
* @param title
*/
public SourceBookPage(String id, String title) {
super(id, title);
}
/**
* Create the form page.
*
* @param editor
* @param id
* @param title
* @wbp.parser.constructor
* @wbp.eval.method.parameter id "Some id"
* @wbp.eval.method.parameter title "Some title"
*/
public SourceBookPage(FormEditor editor, String id, String title) {
super(editor, id, title);
this.object = Shr5Factory.eINSTANCE.createSourceBook();
}
public SourceBookPage(FormEditor editor, String id, String title, SourceBook object) {
super(editor, id, title);
this.object = object;
}
public SourceBookPage(FormEditor editor, String id, String title, SourceBook object, EditingDomain editingDomain, ReferenceManager manager) {
super(editor, id, title, manager);
this.object = object;
this.editingDomain = editingDomain;
}
/**
* Create contents of the form.
*
* @param managedForm
*/
@Override
protected void createFormContent(IManagedForm managedForm) {
FormToolkit toolkit = managedForm.getToolkit();
ScrolledForm form = managedForm.getForm();
form.setText(AdapterFactoryUtil.getInstance().getLabelProvider().getText(object));
Composite body = form.getBody();
toolkit.decorateFormHeading(form.getForm());
toolkit.paintBordersFor(body);
managedForm.getForm().getBody().setLayout(new GridLayout(1, false));
BeschreibbarWidget beschreibbarWidget = new BeschreibbarWidget(managedForm.getForm().getBody(), SWT.NONE, object, toolkit, editingDomain);
beschreibbarWidget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
managedForm.getToolkit().adapt(beschreibbarWidget);
managedForm.getToolkit().paintBordersFor(beschreibbarWidget);
Section sctnData = managedForm.getToolkit().createSection(managedForm.getForm().getBody(), Section.TWISTIE | Section.TITLE_BAR);
sctnData.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
managedForm.getToolkit().paintBordersFor(sctnData);
sctnData.setText("data");
sctnData.setExpanded(true);
Composite composite_1 = managedForm.getToolkit().createComposite(sctnData, SWT.NONE);
managedForm.getToolkit().paintBordersFor(composite_1);
sctnData.setClient(composite_1);
composite_1.setLayout(new GridLayout(9, false));
Section sctnContent = managedForm.getToolkit().createSection(managedForm.getForm().getBody(), Section.TWISTIE | Section.TITLE_BAR);
GridData gd_sctnContent = new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1);
gd_sctnContent.widthHint = 444;
gd_sctnContent.heightHint = 350;
sctnContent.setLayoutData(gd_sctnContent);
managedForm.getToolkit().paintBordersFor(sctnContent);
sctnContent.setText("content");
sctnContent.setExpanded(true);
Composite composite = managedForm.getToolkit().createComposite(sctnContent, SWT.NONE);
managedForm.getToolkit().paintBordersFor(composite);
sctnContent.setClient(composite);
TreeColumnLayout layout = new TreeColumnLayout();
composite.setLayout(layout);//new GridLayout());
TreeViewer treeViewer = new TreeViewer(composite, SWT.BORDER);
treeViewer.setContentProvider(new List2TreeContentProvider());
treeViewer.addDoubleClickListener(this);
treeViewer.addSelectionChangedListener(this);
Tree tree = treeViewer.getTree();
tree.setSortDirection(SWT.UP);
tree.setLinesVisible(true);
tree.setHeaderVisible(true);
managedForm.getToolkit().paintBordersFor(tree);
TreeViewerColumn treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
TreeColumn trclmnName = treeViewerColumn.getColumn();
trclmnName.setWidth(450);
trclmnName.setText("name");
treeViewerColumn.setLabelProvider(new ColumnLabelProvider(){
public org.eclipse.swt.graphics.Image getImage(Object element) {
return labelprovider.getImage(element);
};
@Override
public String getText(Object element) {
return labelprovider.getText(element);
}
});
TreeViewerColumn treeViewerColumn_1 = new TreeViewerColumn(treeViewer, SWT.NONE);
TreeColumn trclmnPage = treeViewerColumn_1.getColumn();
trclmnPage.setWidth(15);
trclmnPage.setAlignment(SWT.RIGHT);
trclmnPage.setText("page");
treeViewerColumn_1.setLabelProvider(new ColumnLabelProvider(){
@Override
public String getText(Object element) {
if (element instanceof Quelle) {
Quelle q = (Quelle)element;
return q.getPage();
}
return super.getText(element);
}
});
layout.setColumnData(trclmnName, new ColumnWeightData(90));
layout.setColumnData(trclmnPage, new ColumnWeightData(10));
Label lblTheContentOf = managedForm.getToolkit().createLabel(sctnContent, "The content of the sourcebook.", SWT.NONE);
sctnContent.setDescriptionControl(lblTheContentOf);
treeViewer.setInput(getObjectsFromSource());
createFormBuilder(managedForm);
emfFormBuilder.addTextEntry(Shr5Package.Literals.SOURCE_BOOK__CODE, composite_1);
emfFormBuilder.addTextEntry(Shr5Package.Literals.SOURCE_BOOK__START_SHR_TIME, composite_1, new DateEntryFactory(toolkit));
emfFormBuilder.addTextEntry(Shr5Package.Literals.SOURCE_BOOK__END_SHR_TIME, composite_1, new DateEntryFactory(toolkit));
m_bindingContext = initDataBindings();
emfFormBuilder.buildinComposite(m_bindingContext, managedForm.getForm().getBody(), object);
managedForm.reflow(true);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private List<EObject> getObjectsFromSource() {
List<EObject> a = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() {
@Override
public boolean evaluate(Object input) {
if (input instanceof Quelle) {
Quelle input2 = (Quelle)input;
return object.equals(input2.getSrcBook()) && ( (input2.eContainer() instanceof ShrList)|| (input2.eContainer() instanceof FertigkeitsGruppe));
}
return false;
}
});
Comparator<Quelle> ca = new Comparator<Quelle>(){
@Override
public int compare(Quelle o1, Quelle o2) {
if(o1.getPage()!=null){
int parseInt = Integer.parseInt(o1.getPage());
if(o2.getPage()!=null)
return parseInt -Integer.parseInt(o2.getPage());
return -1;
}
if(o2.getPage()!=null){
int parseInt = Integer.parseInt(o2.getPage());
if(o1.getPage()!=null)
return parseInt - Integer.parseInt(o1.getPage());
return 1;
}
return 0;
}};
Collections.sort((List )a,ca);
return a;
}
protected DataBindingContext initDataBindings() {
DataBindingContext bindingContext = new DataBindingContext();
//
return bindingContext;
}
@Override
protected EditingDomain getEditingDomain() {
return editingDomain;
}
}