/**
* Դ�������ƣ�JresBasicMasterDetailsBlock.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.ui
* ����˵����JRES Studio�Ľ���չ�ֻ�����ܺͱ༭��ع���
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.jres.basicdata.ui.editor.blocks;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.forms.DetailsPart;
import org.eclipse.ui.forms.IDetailsPage;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.MasterDetailsBlock;
import org.eclipse.ui.forms.SectionPart;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import com.hundsun.ares.studio.core.util.StringUtil;
import com.hundsun.ares.studio.ui.editor.EMFFormPage;
import com.hundsun.ares.studio.ui.editor.IEMFFormPage;
import com.hundsun.ares.studio.ui.editor.blocks.JresDetailsPage;
/**
* @author lvgao
*
*/
public abstract class BaseBasicMasterDetailsBlock extends MasterDetailsBlock {
protected EMFFormPage page;
protected Viewer viewer;
public BaseBasicMasterDetailsBlock(EMFFormPage page) {
this.page = page;
}
@Override
protected void createMasterPart(final IManagedForm managedForm, Composite parent) {
FormToolkit toolkit = managedForm.getToolkit();
Section section = toolkit.createSection(parent, Section.TITLE_BAR);
section.setText(StringUtil.getStringSafely(getSectionName()));
Composite client = toolkit.createComposite(section, SWT.WRAP);
section.setDescription(StringUtils.defaultString(getDescription()));
final SectionPart sPart = new SectionPart(section);
managedForm.addPart(sPart);
Composite tableArea = toolkit.createComposite(client, SWT.NONE);
Composite buttonArea = toolkit.createComposite(client, SWT.NONE);
viewer = createViewer(tableArea,managedForm,page);
viewer.addSelectionChangedListener(new ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent event) {
managedForm.fireSelectionChanged(sPart, event.getSelection());
//viewer.refresh();
}
});
createButtons(buttonArea);
createMenu(viewer);
//����
buttonArea.setLayout(new GridLayout(1,true));
tableArea.setLayout(new GridLayout(1,true));
GridDataFactory.swtDefaults().grab(true, false).applyTo(section);
GridLayoutFactory.swtDefaults().numColumns(2).applyTo(client);
GridDataFactory.fillDefaults().hint(100,350).grab(true, true).applyTo(viewer.getControl());
GridDataFactory.fillDefaults().grab(true, true).applyTo(tableArea);
GridDataFactory.swtDefaults().grab(false, false).align(SWT.FILL, SWT.BEGINNING).applyTo(buttonArea);
// viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
// GridLayoutFactory.fillDefaults().applyTo((Composite) viewer.getControl());
// setMasterLayout(client);
section.setClient(client);
}
/**
* ����master���沼��
*/
protected void setMasterLayout(Composite client) {
client.setLayout(new GridLayout());
}
/**
* �����Ҽ��˵�
* @param client
*/
protected void createMenu(Viewer viewer) {
MenuManager menuManager = new MenuManager("#popup");
menuManager.addMenuListener(new IMenuListener() {
@Override
public void menuAboutToShow(IMenuManager manager) {
manager.removeAll();
createMenus(manager);
}
});
Menu menu = menuManager.createContextMenu(viewer.getControl());
viewer.getControl().setMenu(menu);
}
/**
* �����Ҽ��˵�
* @param manager
*/
protected void createMenus(IMenuManager manager) {
}
/**
* �����ұ߰�ť
* @param client
*/
protected void createButtons(Composite client) {
}
@Override
protected void registerPages(DetailsPart detailsPart) {
for(Object type:getElementTypes()){
IDetailsPage page = getDetailPage(type);
if(this.page != null && page != null){
if(page instanceof JresDetailsPage){
((JresDetailsPage)page).setPage(this.page);
}
detailsPart.registerPage(type, page);
}
}
}
@Override
public void createContent(IManagedForm managedForm) {
super.createContent(managedForm);
ScrolledForm form = managedForm.getForm();
managedForm.getToolkit().decorateFormHeading(form.getForm());
form.setText(getPageHeadName());
form.setImage(getPageHeadImage());
managedForm.getForm().getBody().setLayout(new GridLayout(1,false));
}
/**
* ��ȡҳ��ı���ͼƬ
* @return
*/
protected Image getPageHeadImage(){
return null;
}
/**
* ��ȡҳ��ı���
* @return
*/
protected abstract String getPageHeadName();
/**
* ��ȡ���section�ı���
* @return
*/
protected abstract String getSectionName();
/**
* ��ȡ���section������
* @return
*/
protected abstract String getDescription();
/**
* ��ȡ������Ҫ����detialҳ�������
* @return
*/
protected abstract Object[] getElementTypes();
/**
* ��ȡij���ض����͵�detialҳ��
* @param type
* @return
*/
protected abstract IDetailsPage getDetailPage(Object type);
/**
* ��ȡ�ұߵ���ͼ
* @param client
* @param managedForm
* @param page
* @return
*/
protected abstract Viewer createViewer(Composite client,final IManagedForm managedForm,IEMFFormPage page);
}