package tool.editors.plan;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ExpandBar;
import org.eclipse.swt.widgets.ExpandItem;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.wb.swt.ResourceManager;
import tool.editors.cdf.ConstantDialog;
import tool.model.ToolConstant;
import tool.model.ToolPlan;
import tool.model.grammar.IErrorReporter;
import tool.navigator.common.LabelProvider;
import tool.navigator.prx.ContentProvider;
public class ProjectEditor extends FormPage {
private DataBindingContext m_bindingContext;
public static final String ID = "tool.editors.plan.ProjectEditor";
private boolean dirty = false;
protected IFile file;
protected IErrorReporter model;
private Text nameText;
private Text libraryNameText;
private Text txtStartclass;
private Text txtStartmethod;
private TreeViewer constantsTreeViewer;
private ExpandItem constantsExpanditem;
private TreeViewer supplierPlanTreeViewer;
private Button btnCheckButton;
private Button btnMultithreaded;
private Button btnInternal;
private Combo combo;
private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
public ProjectEditor(FormEditor editor, String id, String title) {
super(editor, id, title);
setTitleImage(ResourceManager.getPluginImage("Tool", "icons/package.gif"));
}
public ProjectEditor(String id, String title) {
super(id, title);
setTitleImage(ResourceManager.getPluginImage("Tool", "icons/package.gif"));
}
public ProjectEditor(){
this(ID, "Project");
setTitleImage(ResourceManager.getPluginImage("Tool", "icons/package.gif"));
}
@Override
public void createPartControl(Composite parent) {
parent.setLayout(new FillLayout(SWT.VERTICAL));
ExpandBar expandBar = new ExpandBar(parent, SWT.NONE);
ExpandItem projectPropertiesExpanditem = new ExpandItem(expandBar, SWT.NONE);
projectPropertiesExpanditem.setImage(ResourceManager.getPluginImage("Tool", "icons/package.gif"));
projectPropertiesExpanditem.setExpanded(true);
projectPropertiesExpanditem.setText("Project Properties");
Composite composite = new Composite(expandBar, SWT.NONE);
projectPropertiesExpanditem.setControl(composite);
composite.setLayout(new GridLayout(2, false));
Label lblName = new Label(composite, SWT.NONE);
lblName.setAlignment(SWT.RIGHT);
lblName.setSize(594, 59);
lblName.setText("Name");
nameText = new Text(composite, SWT.BORDER);
GridData gd_nameText = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gd_nameText.widthHint = 334;
nameText.setLayoutData(gd_nameText);
nameText.setSize(594, 67);
nameText.setEditable(false);
Label lblLibraryName = new Label(composite, SWT.NONE);
lblLibraryName.setAlignment(SWT.RIGHT);
lblLibraryName.setSize(594, 79);
lblLibraryName.setText("Library Name");
libraryNameText = new Text(composite, SWT.BORDER);
GridData gd_libraryNameText = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gd_libraryNameText.widthHint = 95;
libraryNameText.setLayoutData(gd_libraryNameText);
libraryNameText.setSize(594, 94);
Label lblType = new Label(composite, SWT.NONE);
lblType.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblType.setText("Type");
combo = new Combo(composite, SWT.NONE);
combo.setVisibleItemCount(3);
combo.setItems(new String[] {"APPLICATION", "LIBRARY", "SERVER"});
GridData gd_combo = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gd_combo.widthHint = 198;
combo.setLayoutData(gd_combo);
new Label(composite, SWT.NONE);
btnCheckButton = new Button(composite, SWT.CHECK);
btnCheckButton.setSize(594, 118);
btnCheckButton.setText("Restricted Availability");
new Label(composite, SWT.NONE);
btnMultithreaded = new Button(composite, SWT.CHECK);
btnMultithreaded.setText("Multithreaded");
new Label(composite, SWT.NONE);
btnInternal = new Button(composite, SWT.CHECK);
btnInternal.setText("Internal");
Label lblCompatibilityLevel = new Label(composite, SWT.NONE);
lblCompatibilityLevel.setSize(594, 158);
lblCompatibilityLevel.setText("Compatibility Level");
Spinner compatabilitySpinner = new Spinner(composite, SWT.BORDER);
GridData gd_compatabilitySpinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gd_compatabilitySpinner.widthHint = 37;
compatabilitySpinner.setLayoutData(gd_compatabilitySpinner);
Label lblStart = new Label(composite, SWT.NONE);
lblStart.setText("Start");
new Label(composite, SWT.NONE);
Label lblStartClass = new Label(composite, SWT.NONE);
lblStartClass.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblStartClass.setBounds(0, 0, 49, 13);
lblStartClass.setText("Class");
txtStartclass = new Text(composite, SWT.BORDER);
GridData gd_txtStartclass = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gd_txtStartclass.widthHint = 350;
txtStartclass.setLayoutData(gd_txtStartclass);
Label lblStartMethod = new Label(composite, SWT.NONE);
lblStartMethod.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblStartMethod.setText("Method");
txtStartmethod = new Text(composite, SWT.BORDER);
GridData gd_txtStartmethod = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gd_txtStartmethod.widthHint = 350;
txtStartmethod.setLayoutData(gd_txtStartmethod);
projectPropertiesExpanditem.setHeight(projectPropertiesExpanditem.getControl().computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
ExpandItem supplierPlansExpanditem = new ExpandItem(expandBar, SWT.NONE);
supplierPlansExpanditem.setExpanded(true);
supplierPlansExpanditem.setImage(ResourceManager.getPluginImage("Tool", "icons/package.gif"));
supplierPlansExpanditem.setText("Supplier Plans");
Composite composite_1 = new Composite(expandBar, SWT.NONE);
supplierPlansExpanditem.setControl(composite_1);
Button editSuppButton = new Button(composite_1, SWT.NONE);
editSuppButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// TwoPaneElementSelector elementSelector = new TwoPaneElementSelector(getShell(), new LabelProvider(), new LabelProvider());
// elementSelector.setTitle("SupplierPlans");
// elementSelector.setElements(model.getSupplierPlansAsList().toArray());
// elementSelector.setLowerListLabel("Lower List");
// elementSelector.setUpperListLabel("Upper List");
// elementSelector.setMultipleSelection(true);
// //elementSelector.setInitialSelections(new String[] {"One", "Two"});
// elementSelector.open();
// SupplierPlanDialog.show(model.getSupplierPlansAsList(), new ArrayList<ToolPlan>());
}
});
editSuppButton.setBounds(0, 0, 94, 30);
formToolkit.adapt(editSuppButton, true, true);
editSuppButton.setText("Edit");
composite_1.setLayout(new GridLayout(2, false));
supplierPlanTreeViewer = new TreeViewer(composite_1, SWT.BORDER);
Tree supplierPlanTree = supplierPlanTreeViewer.getTree();
supplierPlanTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
new Label(composite_1, SWT.NONE);
new Label(composite_1, SWT.NONE);
supplierPlanTreeViewer.setContentProvider(new ContentProvider(ContentProvider.SUPPLIERS));
supplierPlanTreeViewer.setLabelProvider(new LabelProvider());
supplierPlansExpanditem.setHeight(supplierPlansExpanditem.getControl().computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
constantsExpanditem = new ExpandItem(expandBar, SWT.NONE);
constantsExpanditem.setImage(ResourceManager.getPluginImage("Tool", "icons/constant.gif"));
constantsExpanditem.setText("Constants");
Composite composite_2 = new Composite(expandBar, SWT.NONE);
constantsExpanditem.setControl(composite_2);
composite_2.setLayout(new GridLayout(1, false));
constantsTreeViewer = new TreeViewer(composite_2, SWT.BORDER);
constantsTreeViewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
ITreeSelection selection = (ITreeSelection)event.getSelection();
ToolConstant constant = (ToolConstant)selection.getFirstElement();
ConstantDialog.show(constant);
}
});
constantsTreeViewer.setAutoExpandLevel(1);
Tree constantsTree = constantsTreeViewer.getTree();
GridData gd_constantsTree = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
gd_constantsTree.minimumHeight = 300;
constantsTree.setLayoutData(gd_constantsTree);
constantsTreeViewer.setContentProvider(new ContentProvider(ContentProvider.CONSTANTS));
constantsTreeViewer.setLabelProvider(new LabelProvider());
constantsExpanditem.setHeight(constantsExpanditem.getControl().computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
if (this.model != null){
bind();
}
m_bindingContext = initDataBindings();
}
private void bind() {
m_bindingContext = initDataBindings();
constantsTreeViewer.setInput(null);
supplierPlanTreeViewer.setInput(null);
constantsTreeViewer.setInput(this.model);
supplierPlanTreeViewer.setInput(this.model);
this.dirty = false;
}
public IErrorReporter getModel() {
return model;
}
public void setModel(IErrorReporter model) {
if (m_bindingContext != null){
m_bindingContext.dispose();
m_bindingContext = null;
}
this.model = model;
if (this.model != null && nameText != null){
bind();
}
}
@Override
public boolean isDirty() {
return this.dirty;
}
public void init(IEditorSite site, IEditorInput editorInput) {
super.init(site, editorInput);
IFileEditorInput ifei = (IFileEditorInput)editorInput;
IFile modelFile = ifei.getFile();
ToolPlan plan = ToolPlan.getInstance(modelFile);
setPartName(plan.getToolName());
this.setModel(plan);
}
@Override
public Image getTitleImage() {
return ResourceManager.getPluginImage("Tool", "icons/package.gif");
}
protected DataBindingContext initDataBindings() {
DataBindingContext bindingContext = new DataBindingContext();
//
IObservableValue nameTextObserveTextObserveWidget = SWTObservables.observeText(nameText, SWT.Modify);
IObservableValue modelNameObserveValue = BeansObservables.observeValue(model, "toolName");
bindingContext.bindValue(nameTextObserveTextObserveWidget, modelNameObserveValue, null, null);
//
IObservableValue libraryNameTextObserveTextObserveWidget = SWTObservables.observeText(libraryNameText, SWT.Modify);
IObservableValue modelLibraryNameObserveValue = BeansObservables.observeValue(model, "libraryName");
bindingContext.bindValue(libraryNameTextObserveTextObserveWidget, modelLibraryNameObserveValue, null, null);
//
IObservableValue txtStartclassObserveTextObserveWidget = SWTObservables.observeText(txtStartclass, SWT.Modify);
IObservableValue modelStartClassObserveValue = BeansObservables.observeValue(model, "startClass");
bindingContext.bindValue(txtStartclassObserveTextObserveWidget, modelStartClassObserveValue, null, null);
//
IObservableValue txtStartmethodObserveTextObserveWidget = SWTObservables.observeText(txtStartmethod, SWT.Modify);
IObservableValue modelStartMethodObserveValue = BeansObservables.observeValue(model, "startMethod");
bindingContext.bindValue(txtStartmethodObserveTextObserveWidget, modelStartMethodObserveValue, null, null);
//
IObservableValue btnCheckButtonObserveSelectionObserveWidget = SWTObservables.observeSelection(btnCheckButton);
IObservableValue modelRestrictedObserveValue = BeansObservables.observeValue(model, "restricted");
bindingContext.bindValue(btnCheckButtonObserveSelectionObserveWidget, modelRestrictedObserveValue, null, null);
//
IObservableValue btnMultithreadedObserveSelectionObserveWidget = SWTObservables.observeSelection(btnMultithreaded);
IObservableValue modelMultiThreadedObserveValue = BeansObservables.observeValue(model, "multiThreaded");
bindingContext.bindValue(btnMultithreadedObserveSelectionObserveWidget, modelMultiThreadedObserveValue, null, null);
//
IObservableValue btnInternalObserveSelectionObserveWidget = SWTObservables.observeSelection(btnInternal);
IObservableValue modelInternalObserveValue = BeansObservables.observeValue(model, "internal");
bindingContext.bindValue(btnInternalObserveSelectionObserveWidget, modelInternalObserveValue, null, null);
//
IObservableValue comboObserveSelectionObserveWidget = SWTObservables.observeSelection(combo);
IObservableValue modelProjectTypeObserveValue = BeansObservables.observeValue(model, "projectType");
bindingContext.bindValue(comboObserveSelectionObserveWidget, modelProjectTypeObserveValue, null, null);
//
return bindingContext;
}
}