package com.hundsun.ares.studio.logic.ui.pages; import org.apache.commons.lang.StringUtils; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.events.IExpansionListener; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; import com.hundsun.ares.studio.biz.BizPackage; import com.hundsun.ares.studio.biz.ui.action.IBizActionIDConstants; import com.hundsun.ares.studio.biz.ui.editor.page.InterfacePage; import com.hundsun.ares.studio.core.model.CorePackage; import com.hundsun.ares.studio.core.model.RevisionHistory; import com.hundsun.ares.studio.core.model.util.RevisionHistoryUtil; import com.hundsun.ares.studio.logic.ui.pages.block.InternalVarParameterBlock; import com.hundsun.ares.studio.ui.editor.EMFFormEditor; import com.hundsun.ares.studio.ui.editor.blocks.FormWidgetUtils; import com.hundsun.ares.studio.ui.editor.editable.JresDefaultEditableUnit; import com.hundsun.ares.studio.ui.util.FormLayoutFactory; public abstract class LogicInterfacePage extends InterfacePage { private InternalVarParameterBlock varParamBlock; /** * ���ܺ� */ Text objectID; /** * �汾�� */ Text txtVersion; /** * ����ʱ�� */ Text txtUpdateTime; /** * ���� */ Text txtName; /** *������ */ Text txtCName; /** * �ӿڱ�־ */ Text txtFlag; /** * ���� */ Text txtDescription; /** * ��������� */ Button btnResultSetReturn; private int[] weights = new int[]{15,15,15}; public LogicInterfacePage(EStructuralFeature interfaceFeature, EMFFormEditor editor, String id, String title) { super(interfaceFeature, editor, id, title); } @Override protected void doCreateFormContent(IManagedForm managedForm) { Composite composite = managedForm.getForm().getBody(); GridLayoutFactory.swtDefaults().applyTo(composite); FormToolkit toolkit = managedForm.getToolkit(); managedForm.getForm().setText(getTitle()); toolkit.decorateFormHeading(managedForm.getForm().getForm()); createBasicInfoSection(composite,toolkit); final SashForm sf = new SashForm(composite, SWT.VERTICAL); GridLayoutFactory.swtDefaults().applyTo(sf); GridDataFactory.fillDefaults().grab(true, false).hint(SWT.DEFAULT, 650).applyTo(sf); final Section input = createInputSection(sf, toolkit); final Section output = createOuputSection(sf, toolkit); final Section internal = createInternalSection(sf,toolkit); sf.setWeights(weights); final int unit = weights[0]; input.addExpansionListener(new IExpansionListener() { @Override public void expansionStateChanging(ExpansionEvent e) { } @Override public void expansionStateChanged(ExpansionEvent e) { int[] weights = sf.getWeights(); if(e.getState()){ if(!internal.isExpanded() && !output.isExpanded()){ //չ��ǰ��������ڲ���Ϊ��չ��״̬����ʱ�ڲ�ռ�õĿռ�Ϊչ��ʱ�Ĵ�С sf.setWeights(new int[]{weights[0]*unit,weights[1],weights[2]/unit}); }else{ //������ռ�ô�С��Ϊչ��״̬ sf.setWeights(new int[]{weights[0]*unit,weights[1],weights[2]}); } }else if(!input.isExpanded() && !output.isExpanded() && !internal.isExpanded()){ //��������ڲ�Ϊ��չ��״̬�����ڲ�ռ�ô�С����Ϊչ��ʱ�Ĵ�С sf.setWeights(new int[]{1,1,unit}); }else{ //������ռ�ô�С��Ϊ��չ��״̬ sf.setWeights(new int[]{weights[0]/unit,weights[1],weights[2]}); } } }); output.addExpansionListener(new IExpansionListener() { @Override public void expansionStateChanging(ExpansionEvent e) { } @Override public void expansionStateChanged(ExpansionEvent e) { int[] weights = sf.getWeights(); if(e.getState()){ if(!input.isExpanded() && !internal.isExpanded()){ sf.setWeights(new int[]{weights[0],weights[1]*unit,weights[2]/unit}); }else{ sf.setWeights(new int[]{weights[0],weights[1]*unit,weights[2]}); } }else if(!input.isExpanded() && !output.isExpanded() && !internal.isExpanded()){ sf.setWeights(new int[]{1,1,unit}); }else{ sf.setWeights(new int[]{weights[0],weights[1]/unit,weights[2]}); } } }); internal.addExpansionListener(new IExpansionListener() { @Override public void expansionStateChanging(ExpansionEvent e) { } @Override public void expansionStateChanged(ExpansionEvent e) { int[] weights = sf.getWeights(); if(e.getState()){ if(!input.isExpanded() && !output.isExpanded()){ sf.setWeights(weights); }else{ sf.setWeights(new int[]{weights[0],weights[1],weights[2]*unit}); } }else if(!input.isExpanded() && !output.isExpanded() && !internal.isExpanded()){ sf.setWeights(new int[]{1,1,unit}); }else{ sf.setWeights(new int[]{weights[0],weights[1],weights[2]/unit}); } } }); composite.getParent().layout(); } //������Ϣsection protected Section createBasicInfoSection(Composite composite, FormToolkit toolkit) { Section section = toolkit.createSection(composite, FormWidgetUtils.getDefaultSectionStyles()); section.setText("������Ϣ"); section.setExpanded(true); // �����ؼ� Composite client = toolkit.createComposite(section); Composite item = createGridComposite(client,toolkit); Label lbID = toolkit.createLabel(item, "���ܺţ�"); objectID = toolkit.createText(item, StringUtils.EMPTY, FormWidgetUtils.getDefaultSingleLineTextStyles()); item = createGridComposite(client,toolkit); Label lbName = toolkit.createLabel(item, "���ƣ� "); txtName = toolkit.createText(item, StringUtils.EMPTY, FormWidgetUtils.getDefaultSingleLineTextStyles()); item = createGridComposite(client,toolkit); Label lbCName = toolkit.createLabel(item, "��������"); txtCName = toolkit.createText(item, StringUtils.EMPTY, FormWidgetUtils.getDefaultSingleLineTextStyles()); item = createGridComposite(client,toolkit); Label lbVersion = toolkit.createLabel(item, "�汾�ţ�"); txtVersion = toolkit.createText(item, StringUtils.EMPTY, FormWidgetUtils.getDefaultSingleLineTextStyles()); Composite flagItem = createGridComposite(client,toolkit); Label lbFlag = toolkit.createLabel(flagItem, "�ӿڱ�־��"); txtFlag = toolkit.createText(flagItem, StringUtils.EMPTY, FormWidgetUtils.getDefaultSingleLineTextStyles()); item = createGridComposite(client,toolkit); Label lbUpdateTime = toolkit.createLabel(item, "����ʱ�䣺"); txtUpdateTime = toolkit.createText(item, StringUtils.EMPTY, FormWidgetUtils.getDefaultSingleLineTextStyles()); Composite descriptionItem = createGridComposite(client,toolkit); Label lbDescription = toolkit.createLabel(descriptionItem, "˵���� "); txtDescription = toolkit.createText(descriptionItem, StringUtils.EMPTY, FormWidgetUtils.getDefaultMultiLinesTextStyles()); item = createGridComposite(client,toolkit); Label lbResultSetReturn = toolkit.createLabel(item, "��������أ�"); btnResultSetReturn = toolkit.createButton(item, "", SWT.CHECK); { //�ҳ����µİ汾�� RevisionHistory his = RevisionHistoryUtil.getMaxVersionHisInfo(getEditor().getARESResource().getModule() , getResType()); if (his != null) { txtVersion.setText(his.getVersion()); txtUpdateTime.setText(his.getModifiedDate()); }else { his = RevisionHistoryUtil.getMaxVersionHisInfo(getEditor().getARESResource().getModule()); if (his != null) { txtVersion.setText(his.getVersion()); txtUpdateTime.setText(his.getModifiedDate()); }else { String projectVersion = RevisionHistoryUtil.getProjectPropertyVersion(getEditor().getARESResource().getARESProject()); if (StringUtils.isBlank(projectVersion)) { projectVersion = "1.0.0.1"; } txtVersion.setText(projectVersion); } } } // ֻ������ txtName.setEditable(false); txtUpdateTime.setEditable(false); txtVersion.setEditable(false); txtName.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY)); txtUpdateTime.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY)); txtVersion.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY)); getEditableControl().addEditableUnit(new JresDefaultEditableUnit(txtCName)); getEditableControl().addEditableUnit(new JresDefaultEditableUnit(txtDescription)); getEditableControl().addEditableUnit(new JresDefaultEditableUnit(objectID)); getEditableControl().addEditableUnit(new JresDefaultEditableUnit(txtFlag)); getEditableControl().addEditableUnit(new JresDefaultEditableUnit(btnResultSetReturn)); // ���� GridLayoutFactory.swtDefaults().equalWidth(true).numColumns(1).extendedMargins(0, 0, 0, 0).applyTo(section); GridDataFactory.fillDefaults().grab(true, false).applyTo(section); GridLayoutFactory.swtDefaults().equalWidth(true).numColumns(2).extendedMargins(0, 0, 0, 0).applyTo(client); GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(flagItem); GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(descriptionItem); GridDataFactory.fillDefaults().grab(false, false).applyTo(lbID); GridDataFactory.fillDefaults().grab(false, false).applyTo(lbVersion); GridDataFactory.fillDefaults().grab(false, false).applyTo(lbFlag); GridDataFactory.fillDefaults().grab(false, false).applyTo(lbResultSetReturn); GridDataFactory.fillDefaults().grab(true, false).indent(24, 0).applyTo(objectID); GridDataFactory.fillDefaults().grab(true, false).indent(12, 0).applyTo(txtVersion); GridDataFactory.fillDefaults().grab(true, false).indent(12,0).applyTo(txtFlag); GridDataFactory.fillDefaults().grab(true, false).applyTo(btnResultSetReturn); GridDataFactory.fillDefaults().grab(false, false).applyTo(lbName); GridDataFactory.fillDefaults().grab(false, false).applyTo(lbCName); GridDataFactory.fillDefaults().grab(false, false).applyTo(lbDescription); GridDataFactory.fillDefaults().grab(false, false).applyTo(lbUpdateTime); GridDataFactory.fillDefaults().grab(true, false).indent(18, 0).applyTo(txtName); GridDataFactory.fillDefaults().grab(true, false).hint(10, SWT.DEFAULT).indent(24, 0).applyTo(txtCName); GridDataFactory.fillDefaults().grab(true, false).applyTo(txtUpdateTime); GridDataFactory.fillDefaults().grab(true, true).hint(10, 50).indent(30, 0).applyTo(txtDescription); section.setClient(client); return section; } /** * �������в���ͬ�ı�񲼾����� * @param parent * @param toolkit * @return */ protected Composite createGridComposite(Composite parent,FormToolkit toolkit){ Composite composite = toolkit.createComposite(parent); GridLayoutFactory.swtDefaults().numColumns(2).extendedMargins(0, 0, 0, 0).applyTo(composite); GridDataFactory.fillDefaults().grab(true, false).applyTo(composite); return composite; } protected abstract String getResType(); //�ڲ�����section protected Section createInternalSection(Composite composite, FormToolkit toolkit) { Section section = toolkit.createSection(composite, FormWidgetUtils.getDefaultSectionStyles()); section.setText("�ڲ�����"); Composite content = toolkit.createComposite(section); GridLayoutFactory.fillDefaults().applyTo(content); Composite block = toolkit.createComposite(content); GridDataFactory.fillDefaults().indent(0, 0).grab(true, true).applyTo(block); block.setLayout(new FillLayout()); // �б� varParamBlock = new InternalVarParameterBlock(getEditingDomain(), getEditor().getARESResource(), getProblemPool()); varParamBlock.setEditableControl(getEditableControl()); varParamBlock.setDataType(getDataType()); //������Ӱ�ť varParamBlock.setAddActionIds(new String[] {IBizActionIDConstants.CV_ADD, IBizActionIDConstants.ADD_NON_STD_FIELD_PARME}); varParamBlock.createControl(block, toolkit); getEditor().getActionBarContributor().addGlobalActionHandlerProvider(varParamBlock); addPropertyListener(varParamBlock); getEditingDomain().getCommandStack().addCommandStackListener(varParamBlock); section.setClient(content); return section; } @Override protected void customizeInputParamBlock() { inputParamBlock.setAddActionIds(new String[] {IBizActionIDConstants.CV_ADD, IBizActionIDConstants.ADD_PARAM_GROUP}); } @Override protected void customizeOutputParamBlock() { outputParamBlock.setAddActionIds(new String[] {IBizActionIDConstants.CV_ADD, IBizActionIDConstants.ADD_PARAM_GROUP}); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.DataBindingFormPage#infoChange() */ @Override public void infoChange() { if ( varParamBlock != null ) { varParamBlock.setInput(getInfo()); } super.infoChange(); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.DataBindingFormPage#dispose() */ @Override public void dispose() { removePropertyListener(varParamBlock); getEditingDomain().getCommandStack().removeCommandStackListener(varParamBlock); super.dispose(); } @Override protected void doDataBingingOnControls() { super.doDataBingingOnControls(); bingText(objectID, getInfo(), CorePackage.Literals.BASIC_RESOURCE_INFO__OBJECT_ID); bingText(txtName, getInfo(), CorePackage.Literals.BASIC_RESOURCE_INFO__NAME); bingText(txtCName, getInfo(), CorePackage.Literals.BASIC_RESOURCE_INFO__CHINESE_NAME); bingText(txtFlag, getInfo(), BizPackage.Literals.BIZ_INTERFACE__INTERFACE_FLAG); bingText(txtDescription, getInfo(), CorePackage.Literals.BASIC_RESOURCE_INFO__DESCRIPTION); bingSelection(btnResultSetReturn, getInfo(), BizPackage.Literals.BIZ_INTERFACE__OUTPUT_COLLECTION); } }