/**
* Դ�������ƣ�DataBindingFormPage.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ���Ҷ��
*/
package com.hundsun.ares.studio.ui.editor.blocks;
import java.util.Arrays;
import org.apache.commons.lang.ObjectUtils;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateListStrategy;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.observable.Observables;
import org.eclipse.emf.databinding.EMFDataBindingContext;
import org.eclipse.emf.databinding.edit.EMFEditObservables;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import com.hundsun.ares.studio.ui.databinding.IndexToItemsConverter;
import com.hundsun.ares.studio.ui.databinding.ItemsToIndexConverter;
import com.hundsun.ares.studio.ui.databinding.LabelProviderConverter;
import com.hundsun.ares.studio.ui.editor.EMFFormEditor;
import com.hundsun.ares.studio.ui.editor.EMFFormPage;
import com.hundsun.ares.studio.ui.editor.FormControlProblemView;
import com.hundsun.ares.studio.ui.validate.KeyParameter;
/**
* @author gongyf
*
*/
public abstract class DataBindingFormPage extends EMFFormPage {
private DataBindingContext dataBindingContext;
/**
* @param editor
* @param id
* @param title
*/
public DataBindingFormPage(EMFFormEditor editor, String id, String title) {
super(editor, id, title);
}
/**
* @return the dataBindingContext
*/
protected DataBindingContext getDataBindingContext() {
if (dataBindingContext == null) {
dataBindingContext = new EMFDataBindingContext();
}
return dataBindingContext;
}
protected void destroyDataBindingContext() {
if (dataBindingContext != null) {
dataBindingContext.dispose();
dataBindingContext = null;
}
}
/**
* �������ݰ�
*/
protected abstract void doDataBingingOnControls();
protected void bingSelection(Control control, EObject container, EStructuralFeature feature) {
// ���ݰ�
getDataBindingContext().bindValue(
SWTObservables.observeSelection(control),
EMFEditObservables.observeValue(getEditingDomain(), container, feature));
// �������
getProblemPool().addView(new FormControlProblemView(
new KeyParameter(container, feature), control));
// ֻ������
//getEditableControl().addEditableUnit(new JresDefaultEditableUnit(control));
}
protected void bingText(Text text, EObject container, EStructuralFeature feature) {
// ���ݰ�
getDataBindingContext().bindValue(
SWTObservables.observeText(text, FormWidgetUtils.getDefaultTextDataBingingEvents()),
EMFEditObservables.observeValue(getEditingDomain(), container, feature));
// �������
getProblemPool().addView(new FormControlProblemView(
new KeyParameter(container, feature), text));
// ֻ������
//getEditableControl().addEditableUnit(new JresDefaultEditableUnit(text));
}
/**
* ��һ�������˵�
* @param cb
* @param items
* @param labelProvider �����String���飬��������Ϊnull
* @param container
* @param feature
*/
protected void bingCombo(Combo cb, Object[] items, ILabelProvider labelProvider, EObject container, EStructuralFeature feature) {
labelProvider = (ILabelProvider) ObjectUtils.defaultIfNull(labelProvider, new LabelProvider());
// �������˵�
getDataBindingContext().bindList(
SWTObservables.observeItems(cb),
Observables.staticObservableList(Arrays.asList(items)), null,
new UpdateListStrategy().setConverter(new LabelProviderConverter(labelProvider)));
// ���ݰ�
getDataBindingContext().bindValue(
SWTObservables.observeSingleSelectionIndex(cb),
EMFEditObservables.observeValue(getEditingDomain(), container, feature), new UpdateValueStrategy().setConverter(
new IndexToItemsConverter(items)
), new UpdateValueStrategy().setConverter(new ItemsToIndexConverter(items)));
// �������
getProblemPool().addView(new FormControlProblemView(
new KeyParameter(container, feature), cb));
// ֻ������
//getEditableControl().addEditableUnit(new JresDefaultEditableUnit(cb));
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.form.IEMFFormPage#infoChange()
*/
@Override
public void infoChange() {
destroyDataBindingContext();
doDataBingingOnControls();
super.infoChange();
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.form.EMFFormPage#dispose()
*/
@Override
public void dispose() {
destroyDataBindingContext();
super.dispose();
}
}