/**
* <p>Copyright: Copyright (c) 2009</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.ui.userdialog;
import java.util.HashMap;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* FIXME ���ɽ���Ի���
* ����xml���ö�̬�����û�����
* ���ṩCHECK,RADIO,TEXT,COMBO���ֿؼ�������
* @author maxh
* @version 1.0
* @history
*/
public class GenerateInterfaceDialog extends org.eclipse.jface.dialogs.Dialog {
DialogInterfaceXml xmlDialog;
public GenerateInterfaceDialog (Shell parentShell, DialogInterfaceXml xmlDialog) {
super (parentShell);
this.xmlDialog = xmlDialog;
}
// ���ɿؼ�������
Control[][] control;
// ���ڷ�װ�ؼ�value
/*
* �ؼ����ݼ��� keyΪ��ſؼ�xml�ж�������Լ�value��map valueΪ�ؼ��Ƿ�ѡ�еIJ���ֵ����ҪΪcheck��radio����
*/
HashMap<String, Object> resultMap = new HashMap<String, Object> ();
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea (parent);
control = new Control[xmlDialog.getLstMenuInterfaceGroup().size ()][];
for (int groupIndex = 0; groupIndex < xmlDialog.getLstMenuInterfaceGroup().size (); groupIndex++) {
DialogInterfaceGroup group = xmlDialog.getLstMenuInterfaceGroup().get (groupIndex);
final List<DialogInterfaceItem> lstItem = group.getLstMenuInterfaceItem ();
Composite subComposite;
if (group.isUse ()) {
Group menuGroup = new Group (composite, SWT.NONE);
menuGroup.setVisible (true);
menuGroup.setLayout (new RowLayout ());
menuGroup.setText (group.getGroupName ());
subComposite = menuGroup;
}else{
// ����һ������������ڰڷ�group֮��IJ��ֿؼ�
subComposite = new Composite (composite, SWT.NONE);
}
GridLayout layout = new GridLayout (6, false);
layout.marginWidth = 0;
layout.marginHeight = 0;
subComposite.setLayout (layout);
control[groupIndex] = new Control[lstItem.size ()];
for (int i = 0; i < lstItem.size (); i++) {
if (lstItem.get (i).getSwtType ().equalsIgnoreCase ("CHECK")||lstItem.get (i).getSwtType ().equalsIgnoreCase ("RADIO")) {
// ��ť�ؼ�
int swtType = SWT.NULL;
if (lstItem.get (i).getSwtType ().equalsIgnoreCase ("CHECK")) swtType = SWT.CHECK;
if (lstItem.get (i).getSwtType ().equalsIgnoreCase ("RADIO")) swtType = SWT.RADIO;
Button btn = new Button (subComposite, swtType);
btn.setText (lstItem.get (i).getLableName ());
btn.setData (lstItem.get (i).getId());
btn.setSelection(lstItem.get(i).getValue().equalsIgnoreCase("true"));
control[groupIndex][i] = btn;
}else if (lstItem.get (i).getSwtType ().equalsIgnoreCase ("TEXT")) {
// Text�ؼ�
Label lable = new Label (subComposite, SWT.NONE);
lable.setText (lstItem.get (i).getLableName () + ":");
Text text = new Text (subComposite, SWT.BORDER);
text.setData (lstItem.get (i).getId());
text.setText(lstItem.get(i).getValue());
control[groupIndex][i] = text;
}else if (lstItem.get (i).getSwtType ().equalsIgnoreCase ("COMBO")) {
// ������ؼ�
Label lable = new Label (subComposite, SWT.NONE);
lable.setText (lstItem.get (i).getLableName () + ":");
Combo combo = new Combo (subComposite, SWT.BORDER);
String[] values = lstItem.get (i).getValue ().split (",");
for (String value : values)
combo.add (value);
combo.select (0);
combo.setData (lstItem.get (i).getId());
control[groupIndex][i] = combo;
}
}
}
return composite;
}
@Override
protected void okPressed() {
// ѭ����ȡ�ؼ��е�����
for (int i = 0; i < control.length; i++) {
for (int j = 0; j < control[i].length; j++) {
String value = control[i][j].getData ().toString ();
if (control[i][j] instanceof Button) {
Button btn = (Button) control[i][j];
resultMap.put(value, btn.getSelection());
}else if (control[i][j] instanceof Text) {
Text text = (Text) control[i][j];
resultMap.put(value, text.getText());
}else if (control[i][j] instanceof Combo) {
Combo combo = (Combo) control[i][j];
resultMap.put(value, combo.getText());
}
}
}
super.okPressed ();
}
@Override
public Shell getShell() {
// TODO Auto-generated method stub
Shell shell = super.getShell();
shell.setText(xmlDialog.getTitle());
return shell;
}
public HashMap<String, Object> getResultMap() {
return resultMap;
}
}