/**
* <p>Copyright: Copyright 2010</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.ui.page;
import java.util.List;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapData;
import com.hundsun.ares.studio.ui.grid.EditorComponent;
import com.hundsun.ares.studio.ui.util.FormLayoutFactory;
import com.hundsun.ares.studio.ui.util.ImporveControlWithDitryStateContext;
/**
* section���� ����״̬����չҳ��
* @author maxh
*
*/
public abstract class ExtendSectionScrolledFormPage<T> extends
ExtendPageWithMyDirtySystem<T> {
public ExtendSectionScrolledFormPage(FormEditor editor, String id, String title) {
super(editor, id, title);
}
protected ScrolledForm scrolledForm;
protected FormToolkit formToolkit;
protected Composite formComposite;
protected IManagedForm managedForm;
protected Section createSectionWithTitle(Composite parent, FormToolkit toolkit, String title, boolean expanded) {
return createSectionWithTitle(parent, toolkit, title, expanded,new TableWrapData(TableWrapData.FILL_GRAB));
}
protected Section createSectionWithTitle(Composite parent, FormToolkit toolkit, String title, boolean expanded,Object sectionLayoutData) {
int style = /* Section.DESCRIPTION | */ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE;
if (expanded)
style = style | ExpandableComposite.EXPANDED;
Section section = toolkit.createSection(parent, style);
section.setText(title);
section.addExpansionListener(new ExpansionAdapter() {
public void expansionStateChanged(ExpansionEvent e) {
scrolledForm.reflow(true);
}
});
section.setLayoutData(sectionLayoutData);
return section;
}
@Override
protected void createFormContent(IManagedForm managedForm) {
// �������崹ֱ��ҳ��
this.managedForm = managedForm;
scrolledForm = managedForm.getForm();
formToolkit = managedForm.getToolkit();
formComposite = scrolledForm.getBody();
scrolledForm.setText(getTitle());
formComposite.setLayout(getFormLayout());
//����ʵ�ִ���sections����
createSections(managedForm);
updateEditableState();
}
protected abstract void createSections(IManagedForm managedForm);
public ImporveControlWithDitryStateContext createImporveControlWithDitryStateContext(Composite parent, final IManagedForm managedForm){
FormToolkit toolkit = managedForm.getToolkit();
return new ImporveControlWithDitryStateContext(parent,dirty,toolkit,getUndoContext(),managedForm.getMessageManager(),info);
}
/**
* �������д�÷�����ҳ��IJ���
* @return
*/
protected Layout getFormLayout(){
return FormLayoutFactory.createClearTableWrapLayout(false, 1);
}
/**
* �����ؼ�����Component
* ����ΪGridLayout(4, false)
* @param title
* @param expanded
* @return
*/
public Section createCompositeSection(String title,boolean expanded){
return createCompositeSection(title,expanded,new GridLayout(4, false));
}
/**
* �����ؼ�����Component�����û��Լ�ָ������
* @param title
* @param expanded
* @return
*/
public Section createCompositeSection(String title,boolean expanded,Layout layout){
Section section = createSectionWithTitle(formComposite, formToolkit, title, expanded);
Composite composite = formToolkit.createComposite(section);
section.setClient(composite);
composite.setLayout(layout);
return section;
}
/**
* ����Table��Tree�͵�Component
* @param title
* @param expanded
* @param component
* @param input
* @return
*/
public Section createEditorComponentSection(String title,boolean expanded,EditorComponent component,List input){
Section section = createSectionWithTitle(formComposite, formToolkit, title, expanded);
Composite client = createEditorComponentComposite(component,input,section,managedForm);
section.setClient(client);
return section;
}
}