/**
* <p>Copyright: Copyright (c) 2009</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.ui.editor;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
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.core.IARESProblem;
import com.hundsun.ares.studio.core.IDependenceDescriptor;
import com.hundsun.ares.studio.internal.core.ARESProjectProperty;
import com.hundsun.ares.studio.internal.ui.editor.ExtensionFieldEditorDescriptor;
import com.hundsun.ares.studio.internal.ui.editor.ExtensionFieldEditorRegistry;
import com.hundsun.ares.studio.ui.control.ControlWithChecker;
import com.hundsun.ares.studio.ui.control.TextAdaptor;
import com.hundsun.ares.studio.ui.page.SectionScrolledFormPage;
import com.hundsun.ares.studio.ui.util.FormLayoutFactory;
import com.hundsun.ares.studio.ui.util.ImporveControlWithDitryStateContext;
/**
* ��Ŀ���Ա༭��Overviewҳ�档
* @author sundl
*/
public class ProjectOverviewPage extends SectionScrolledFormPage<ARESProjectProperty> {
public ProjectOverviewPage(FormEditor editor) {
super(editor, "overview", "Overview");
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.ui.page.SectionScrolledFormPage#getFormLayout()
*/
@Override
protected Layout getFormLayout() {
return FormLayoutFactory.createFormPaneTableWrapLayout(false, 2);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.ui.page.SectionScrolledFormPage#createSections(org.eclipse.ui.forms.IManagedForm)
*/
@Override
protected void createSections(IManagedForm managedForm) {
FormToolkit toolkit = managedForm.getToolkit();
// left and right part.
Composite left = toolkit.createComposite(managedForm.getForm().getBody());
left.setLayout(FormLayoutFactory.createFormPaneTableWrapLayout(false, 1));
left.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
Composite right = toolkit.createComposite(managedForm.getForm().getBody());
right.setLayout(FormLayoutFactory.createFormPaneTableWrapLayout(false, 1));
right.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
// 'General' section
//Section general = createCompositeSection("General", true, new GridLayout(2, false));
Section general = createSectionWithTitle(left, toolkit, "������Ϣ", true, new TableWrapData(TableWrapData.FILL_GRAB));
createClientInBasicInformationSection(general, managedForm);
// // 'Dependencies' section
// Section dependencies = createSectionWithTitle(right, toolkit, "����", true, new TableWrapData(TableWrapData.FILL_GRAB));
// createDependenciesSection(dependencies);
// 'Extension' section
Section extension = createSectionWithTitle(left, toolkit, "ϵͳ����", true, new TableWrapData(TableWrapData.FILL_GRAB));
createExtensionSection(extension);
}
private void createClientInBasicInformationSection(Section basicSection, final IManagedForm managedForm) {
FormToolkit toolkit = managedForm.getToolkit();
Composite client = toolkit.createComposite(basicSection);
basicSection.setClient(client);
client.setLayout(new GridLayout(2, false));
ImporveControlWithDitryStateContext context = new ImporveControlWithDitryStateContext(client, dirty,toolkit,getUndoContext(),managedForm.getMessageManager(),info);
TextAdaptor idText = new TextAdaptor("ID��", SWT.BORDER, context, "id"){
@Override
public IARESProblem check() {
// String id = info.getId();
// IStatus result = AresConventions.checkProjectId(id);
// if (!result.isOK()) {
// IARESProblem problem = ARESProblem.createFrom(result);
// if (problem != null) {
// problem.setMessage(result.getMessage());
// return problem;
// }
// }
return super.check();
}
};
idText.setCheckModel(ControlWithChecker.MODIFY_CHECK);
GridDataFactory.createFrom((GridData) idText.getControl().getLayoutData()).hint(100, -1).applyTo(idText.getControl());
getEditableComponent().add(idText);
TextAdaptor nameText = new TextAdaptor("���֣�",SWT.BORDER,context,"name");
GridDataFactory.createFrom((GridData) nameText.getControl().getLayoutData()).hint(100, -1).applyTo(nameText.getControl());
getEditableComponent().add(nameText);
TextAdaptor versionText = new TextAdaptor("�汾��",SWT.BORDER,context,"version");
GridDataFactory.createFrom((GridData) versionText.getControl().getLayoutData()).hint(100, -1).applyTo(versionText.getControl());
getEditableComponent().add(versionText);
TextAdaptor contactText = new TextAdaptor("��ϵ��ʽ��", SWT.BORDER , context, "contact");
GridDataFactory.createFrom((GridData) versionText.getControl().getLayoutData()).hint(100, -1).applyTo(contactText.getControl());
getEditableComponent().add(contactText);
TextAdaptor noteText = new TextAdaptor("˵����",SWT.MULTI|SWT.V_SCROLL | SWT.BORDER,context,"note") {
protected void setStyle() {
setLabelLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
GridData data = new GridData(GridData.FILL_BOTH);
data.minimumHeight = 30;
data.heightHint = 50;
data.widthHint = 300;
setControlLayoutData(data);
}
};
getEditableComponent().add(noteText);
refreshSection(basicSection);
}
class DependenciesItemLabelProvider extends LabelProvider {
public String getText(Object element) {
if (element instanceof IDependenceDescriptor) {
IDependenceDescriptor desc = (IDependenceDescriptor)element;
return desc.getId() + desc.getVersionConstraint();
}
return null;
}
}
private void createExtensionSection(Section section) {
FormToolkit toolkit = managedForm.getToolkit();
final Composite client = toolkit.createComposite(section);
section.setClient(client);
client.setLayout(new GridLayout(2, false));
ImporveControlWithDitryStateContext context = new ImporveControlWithDitryStateContext(client, dirty,toolkit,getUndoContext(),managedForm.getMessageManager(),info);
ExtensionFieldEditorRegistry editorRegistry = ExtensionFieldEditorRegistry.getInstance();
List<ExtensionFieldEditorDescriptor> editorDescriptors = new ArrayList<ExtensionFieldEditorDescriptor>(editorRegistry.getDescriptors());
Collections.sort(editorDescriptors, new Comparator<ExtensionFieldEditorDescriptor>() {
public int compare(ExtensionFieldEditorDescriptor o1, ExtensionFieldEditorDescriptor o2) {
String order1 = o1.getConfigurationElement().getAttribute("order");
String order2 = o2.getConfigurationElement().getAttribute("order");
try {
int oo1 = Integer.parseInt(order1);
int oo2 = Integer.parseInt(order2);
return oo1 - oo2;
} catch (Exception e) {
}
return -1;
}
});
for (ExtensionFieldEditorDescriptor desc : editorDescriptors) {
ExtensionFieldEditor field = desc.createEditor();
if (field == null)
continue;
field.init(info);
if (field instanceof IProjectExtensibleStatus) {
((IProjectExtensibleStatus)field).setAresProject(((ProjectPropertyEditor)getEditor()).getARESProject());
}
field.createControls(toolkit, context);
getEditableComponent().add(field);
}
toolkit.paintBordersFor(client);
}
}