package net.ms.designer.editors.packages.dialog;
import java.util.List;
import net.ms.designer.core.MsContext;
import net.ms.designer.core.MsElement;
import net.ms.designer.core.MsProject;
import net.ms.designer.editors.component.tools.WriteToProjectXML;
import net.ms.designer.editors.packages.models.Package;
import net.ms.designer.editors.packages.models.PackageDiagram;
import net.ms.designer.editors.packages.ui.PackageEditor;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
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.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.internal.UIPlugin;
public class PropertyDialog extends TitleAreaDialog
{
public int status;
private Object type;
private Object container;
private Shell shell;
private Text txtName;
private Text txtIname;
private Text txtDesc;
private Label lName;
private Label lIname;
private Label lDesc;
public PropertyDialog(Shell parent, Object type ,Object container)
{
super(parent);
shell = parent;
this.type = type;
this.container = container;
}
protected Control createDialogArea(Composite parent)
{
setTitle("�������Ϣ");
// config the composite
Composite composite = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
layout.marginHeight = 5;
layout.marginWidth = 20;
layout.verticalSpacing = 8;
layout.numColumns = 2;
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
composite.setLayout(layout);
lName = new Label(composite,SWT.NONE);
lName.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
lName.setText("����");
txtName = new Text(composite,SWT.BORDER);
txtName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
lIname = new Label(composite,SWT.NONE);
lIname.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
lIname.setText("����");
txtIname = new Text(composite,SWT.BORDER);
txtIname.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
lDesc = new Label(composite,SWT.NONE);
lDesc.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
lDesc.setText("����");
txtDesc = new Text(composite,SWT.BORDER);
txtDesc.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
if( ((Package)type).getName()!= null)
txtName.setText(((Package)type).getName());
else
txtName.setText("");
if(((Package)type).getIname() != null)
txtIname.setText(((Package)type).getIname());
else
txtIname.setText("");
if(((Package)type).getDesc() != null)
txtDesc.setText(((Package)type).getDesc());
else
txtDesc.setText("");
return composite;
}
public void okPressed()
{
if(txtName.getText() != "")
{
boolean flag = true;
List packs = ((PackageDiagram)container).getNodes();
for(int i = 0;i < packs.size(); i++)
{
if(((Package)packs.get(i)).getName().equals(txtName.getText()))
{
flag = false;
break;
}
}
if(!flag)
{
MessageBox box = new MessageBox(shell);
box.setMessage("Invailed name!");
box.open();
return;
}
// implements the changing
// begin
String oldName = ((Package)type).getName();
String newName = txtName.getText();
if(!oldName.equals(newName) && status == 1)
{
this.dealChanging("package" , "name" , oldName , newName);
}
// end
((Package)type).setName(txtName.getText());
((Package)type).setIname(txtIname.getText());
((Package)type).setDesc(txtDesc.getText());
super.okPressed();
return;
}
}
/**
*
* @param parentTag
* @param tag
* @param oldText
* @param newText
*/
public void dealChanging(String parentTag , String tag , String oldText , String newText)
{
PackageEditor editor = (PackageEditor)UIPlugin.getDefault()
.getWorkbench().getActiveWorkbenchWindow()
.getActivePage().getActiveEditor();
MsProject project = editor.getProject();
MsContext context = editor.getContext();
//
// modify the "project.xml" file
//
String filePath = project.getConfigPath() + "project.xml";
WriteToProjectXML writor = new WriteToProjectXML();
try
{
writor.changeText(filePath , parentTag , tag , oldText , newText);
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
//
// modify the context object
//
MsElement oldElement = context.getElement("component_" + oldText);
oldElement.setNodeName(newText);
MsElement newElement = oldElement;
context.addElement(newElement);
context.removeElement("component_" + oldText);
}
}