package com.hundsun.ares.studio.jres.basicdata.ui.editor.pages; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.databinding.edit.EMFEditObservables; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PartInitException; import org.eclipse.ui.forms.IMessageManager; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Hyperlink; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.jres.basicdata.core.basicdata.BasicdataPackage; import com.hundsun.ares.studio.jres.basicdata.logic.util.EPackageUtil; import com.hundsun.ares.studio.model.reference.ReferenceInfo; import com.hundsun.ares.studio.reference.ReferenceManager; import com.hundsun.ares.studio.ui.assist.IARESResourceAssistantProvider; import com.hundsun.ares.studio.ui.assist.TextContentAssistEx; import com.hundsun.ares.studio.ui.dialog.ARESResourceSelectionDialog; import com.hundsun.ares.studio.ui.editor.FormControlProblemView; import com.hundsun.ares.studio.ui.editor.blocks.FormWidgetUtils; import com.hundsun.ares.studio.ui.editor.blocks.JresDetailsPage; import com.hundsun.ares.studio.ui.util.ARESUIUtil; import com.hundsun.ares.studio.ui.validate.KeyParameter; public class SingelTableDetailPage extends JresDetailsPage { /**��������*/ Text txtType; /**URL*/ Text txtUrl; /**����*/ Text txtMaster; IARESResource resource; TableViewer viewer; public SingelTableDetailPage(IARESResource resource, TableViewer viewer) { this.resource = resource; this.viewer = viewer; } @Override protected String getSectionName() { return "��ά�������Ϣ"; } @Override protected String getDescription() { return null; } @Override protected void createSectionContents(final Composite client) { FormToolkit toolkit = form.getToolkit(); Label lbType = toolkit.createLabel(client, "��������",SWT.None); txtType = toolkit.createText(client, "",SWT.BORDER); txtType.setEnabled(false); Label lbUrl = toolkit.createLabel(client, "URL",SWT.None); txtUrl = toolkit.createText(client, "", SWT.BORDER); txtUrl.setEnabled(false); Button btnBrown = toolkit.createButton(client, "���...", SWT.PUSH); Hyperlink lbMaster = toolkit.createHyperlink(client, "����", SWT.NONE); IARESResourceAssistantProvider provider = new BasicDataResourceAssistantProvider(resource.getARESProject(),EPackageUtil.getBasicDataType(resource.getARESProject())); txtMaster = new TextContentAssistEx(client, SWT.BORDER, provider);//toolkit.createText(client, "", SWT.BORDER); GridLayoutFactory.swtDefaults().numColumns(3).equalWidth(false).applyTo(client); GridDataFactory.fillDefaults().grab(false, false).applyTo(lbType); GridDataFactory.fillDefaults().grab(false, false).applyTo(lbUrl); GridDataFactory.fillDefaults().grab(false, false).applyTo(btnBrown); GridDataFactory.fillDefaults().grab(false, false).applyTo(lbMaster); GridDataFactory.fillDefaults().grab(true, false).span(2, -1).applyTo(txtType); GridDataFactory.fillDefaults().grab(true, false).applyTo(txtUrl); GridDataFactory.fillDefaults().grab(true, false).span(2, -1).applyTo(txtMaster); btnBrown.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ARESResourceSelectionDialog dialog = new ARESResourceSelectionDialog(client.getShell(), resource.getARESProject(), "singletabledata"); dialog.setInitialPattern("**"); if(Window.OK == dialog.open()){ Object obj = dialog.getFirstResult(); if(obj != null && obj instanceof IARESResource){ IARESResource sel = (IARESResource)obj; String path = sel.getResource().getProjectRelativePath().toOSString(); txtUrl.setText(path); } } } }); lbMaster.addHyperlinkListener(new HyperlinkAdapter() { @Override public void linkActivated(HyperlinkEvent e) { linkARESResource(txtMaster.getText()); } }); } private void linkARESResource(String resName) { ReferenceInfo info = ReferenceManager.getInstance().getFirstReferenceInfo(resource.getARESProject(), EPackageUtil.getBasicDataType(resource.getARESProject()), resName, true); if(info != null){ try { ARESUIUtil.openEditor(info.getResource()); } catch (PartInitException e) { e.printStackTrace(); } } } @Override protected DataBindingContext databinding() { DataBindingContext context = new DataBindingContext(); context.bindValue( SWTObservables.observeText(txtType, FormWidgetUtils.getDefaultTextDataBingingEvents()), EMFEditObservables.observeValue(page.getEditingDomain(), (EObject)input, BasicdataPackage.Literals.PACKAGE_DEFINE__TYPE), EPackageUtil.getTypeTargetToModelStrategy(), EPackageUtil.getTypeModelToTargetStrategy()); context.bindValue( SWTObservables.observeText(txtUrl, FormWidgetUtils.getDefaultTextDataBingingEvents()), EMFEditObservables.observeValue(page.getEditingDomain(), (EObject)input, BasicdataPackage.Literals.PACKAGE_DEFINE__URL)); context.bindValue( SWTObservables.observeText(txtMaster, FormWidgetUtils.getDefaultTextDataBingingEvents()), EMFEditObservables.observeValue(page.getEditingDomain(), (EObject)input, BasicdataPackage.Literals.SINGLE_TABLE__MASTER)); KeyParameter key = new KeyParameter(input, BasicdataPackage.Literals.SINGLE_TABLE__MASTER); page.getProblemPool().addView(new FormControlProblemView(key, txtMaster)); refreshInitProblem(key, txtMaster); return context; } /** * ˢ�³�ʼ������Ϣ * @param control * @param key */ private void refreshInitProblem(KeyParameter key, Control control) { Object[] problems = page.getProblemPool().getProblem(key); IMessageManager manager = form.getMessageManager(); if (problems != null && problems.length > 0) { Diagnostic diagnostic = ((Diagnostic)problems[0]); manager.addMessage(key, diagnostic.getMessage(), diagnostic, FormControlProblemView.convertDiagnosticSeverity(diagnostic.getSeverity()), control); } else { manager.removeMessage(key, control); } } }