/**
* Դ�������ƣ�HisInternalVerColumnDialog.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.database.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.jres.clearinghouse;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.core.model.CorePackage;
import com.hundsun.ares.studio.core.model.RevisionHistory;
import com.hundsun.ares.studio.jres.clearinghouse.composite.ModifyActionComposite;
import com.hundsun.ares.studio.jres.clearinghouse.constant.HisModifyActionFactory;
import com.hundsun.ares.studio.jres.clearinghouse.constant.HisModifyActionFactory.MODIFYACTION_TYPE;
import com.hundsun.ares.studio.jres.model.chouse.IStock3Constant;
import com.hundsun.ares.studio.jres.model.chouse.Modification;
import com.hundsun.ares.studio.jres.model.chouse.util.StockUtils;
import com.hundsun.ares.studio.jres.model.database.TableResourceData;
/**
* ��ʷ��¼�������ݵ�����
* @author wangxh
*
*/
public class HisModifyActionColumnDialog extends Dialog {
//������
Combo comboVersion;
//��ϸ����Ϣ����
Composite detailComp;
//����¼��action
Modification action;
IARESResource resource;
private TableResourceData tableData;
//�������������Ͷ�Ӧ������Ϣ����
List<Composite>detailComps = new ArrayList<Composite>();
//�����ĺ��modifyaction��Ϣ
Modification result;
//ѡ�е�����Ϣ����
Composite topComp;
//ѡ�е�������
MODIFYACTION_TYPE topVersion;
RevisionHistory rh;
//����������
final MODIFYACTION_TYPE[] values = HisModifyActionFactory.MODIFYACTION_TYPE.values();
final StackLayout layout=new StackLayout();
/**
* @param parentShell
* @param action
* @param resource
*/
// 2012-05-15 sundl ��Ӳ������Ա�����ڶԻ����л�ȡ�����Ϣ
public HisModifyActionColumnDialog(Shell parentShell, TableResourceData tableData, Modification action, IARESResource resource ,RevisionHistory rh) {
super(parentShell);
this.action = action;
this.resource = resource;
this.result = action;
this.tableData = tableData;
this.rh = rh;
}
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
*/
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(IStock3Constant.TABLE_CHANGE_TITLE);
newShell.setImage(AbstractUIPlugin.imageDescriptorFromPlugin("com.hundsun.ares.studio.jres.database.resources", "icons/���ݿ�.gif").createImage());
}
@Override
protected Button createButton(org.eclipse.swt.widgets.Composite parent,
int id, String label, boolean defaultButton) {
Button btn = null;
if (IDialogConstants.OK_ID == id) {
btn = super.createButton(parent, id, "ȷ��", true);
} else if (IDialogConstants.CANCEL_ID == id) {
btn = super.createButton(parent, id, "ȡ��", false);
}
return btn;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
Composite verComp = new Composite(composite, SWT.BORDER);
detailComp = new Composite(composite, SWT.BORDER);
creatVersionComposite(verComp,action);
detailComp.setLayout(layout);
for(int i =0;i<values.length;i++){
MODIFYACTION_TYPE select = values[i];
detailComps.add(HisModifyActionFactory.getDetailComposite(select,detailComp,tableData, action,resource));
}
GridDataFactory.fillDefaults().grab(true, true).hint(-1, 70).applyTo(verComp);
GridDataFactory.fillDefaults().grab(true, true).applyTo(detailComp);
return composite;
}
/**
* @param verComp
* @param action
*/
private void creatVersionComposite(Composite verComp, Modification action) {
String version = HisModifyActionFactory.getActionName(action);
verComp.setLayout(new GridLayout(2, false));
Label lbVersion = new Label(verComp, SWT.None);
lbVersion.setText("��ѡ�������ͣ�");
comboVersion = new Combo(verComp, SWT.BORDER | SWT.READ_ONLY);
int select = 0;
comboVersion.removeAll();
for(int i = 0; i<values.length; i++){
comboVersion.add(values[i].name(), i);
if(version != null && version.equals(values[i].name())){
select = i;
}
}
comboVersion.select(select);
GridDataFactory.fillDefaults().grab(false, true).applyTo(lbVersion);
GridDataFactory.fillDefaults().grab(true, true).applyTo(comboVersion);
//������ѡ����������ʾ��Ӧ�Ľ���
comboVersion.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
int i = comboVersion.getSelectionIndex();
topComp = detailComps.get(i);
topVersion = values[i];
layout.topControl = topComp;
detailComp.layout();
}
});
comboVersion.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
int i = comboVersion.getSelectionIndex();
topComp = detailComps.get(i);
topVersion = values[i];
layout.topControl = topComp;
detailComp.layout();
}
});
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
*/
@Override
protected void okPressed() {
super.okPressed();
if(topComp instanceof ModifyActionComposite){
result = ((ModifyActionComposite)topComp).getAction();
}
EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(tableData);
Command command = new SetCommand(editingDomain, rh, CorePackage.Literals.REVISION_HISTORY__MODIFIED, StockUtils.getModificationDescription(tableData, result));
editingDomain.getCommandStack().execute(command);
// rh.setModified(StockUtils.getModificationDescription(result));
}
/**
* ��ȡ�Ի���ѡ������
*
* @return
*/
public Object getResult() {
return result;
}
}