import java.util.Iterator; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.part.EditorPart; import com.businessobjects.crystalreports.designer.sdk.ICrystalDocumentChangedEvent; import com.businessobjects.crystalreports.designer.sdk.ICrystalDocumentChangedListener; import com.businessobjects.crystalreports.designer.sdk.ICrystalReportsEditor; import com.businessobjects.crystalreports.designer.sdk.ICrystalReportsEditorPage; import com.crystaldecisions.sdk.occa.report.application.AdvancedClientDocumentEvent; import com.crystaldecisions.sdk.occa.report.application.DataDefController; import com.crystaldecisions.sdk.occa.report.application.IAdvancedClientDocumentEventListener; import com.crystaldecisions.sdk.occa.report.application.IReportClientDocument; import com.crystaldecisions.sdk.occa.report.application.ParameterFieldController; import com.crystaldecisions.sdk.occa.report.data.Fields; import com.crystaldecisions.sdk.occa.report.data.IDataDefinition; import com.crystaldecisions.sdk.occa.report.data.IField; import com.crystaldecisions.sdk.occa.report.data.IParameterField; import com.crystaldecisions.sdk.occa.report.lib.ReportSDKException; public class MyReportPage extends EditorPart implements ICrystalReportsEditorPage, ICrystalDocumentChangedListener, IAdvancedClientDocumentEventListener { ICrystalReportsEditor myEditor; private List paramList; private Label paramLabel; private Button paramButton; private ListViewer listViewer; public void init(IEditorSite site, IEditorInput input) { setSite(site); setInput(input); } public void createPartControl(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 4; composite.setLayout(layout); paramLabel = new Label(composite, SWT.CENTER); paramLabel.setText("Parameter Fields"); paramList = new List(composite, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL); listViewer = new ListViewer(paramList); listViewer.setContentProvider(new ArrayContentProvider()); listViewer.setLabelProvider(new LabelProvider() { public String getText(Object element) { IField field = (IField) element; return field.getFormulaForm(); } }); listViewer.addSelectionChangedListener(new ISelectionChangedListener () { public void selectionChanged(SelectionChangedEvent event) { ListViewer listViewer = (ListViewer)event.getSource(); StructuredSelection selection = (StructuredSelection)listViewer.getSelection(); if (!selection.isEmpty()) paramButton.setEnabled(true); } }); paramButton = new Button (composite, SWT.PUSH | SWT.CENTER); paramButton.setText("Delete Parameter Field"); paramButton.addSelectionListener (new SelectionAdapter() { public void widgetSelected (SelectionEvent e) { DataDefController controller = null; try { controller = myEditor.getReportClientDocument().getDataDefController(); ParameterFieldController parameterFieldController = controller.getParameterFieldController(); StructuredSelection selection = (StructuredSelection) listViewer.getSelection (); Iterator itr = selection.iterator(); while(itr.hasNext()) parameterFieldController.remove((IParameterField)itr.next()); } catch (ReportSDKException e1) { e1.printStackTrace(); } finally { ((Button) e.getSource()).setEnabled(false); } } }); } public boolean attachOnStart() { return false; } public void attachToEditor(ICrystalReportsEditor editor) { myEditor = editor; setInput(myEditor.getEditorInput()); myEditor.addDocumentChangedListener(this); documentChangedHelper(null, myEditor.getReportClientDocument(), true); myEditor.addPropertyListener (new IPropertyListener () { public void propertyChanged(Object source, int propID) { if (propID == IEditorPart.PROP_INPUT) setInput (myEditor.getEditorInput()); } }); } public void documentChanged(ICrystalDocumentChangedEvent evt) { IReportClientDocument oldDoc = evt.getOldDocument(); IReportClientDocument newDoc = evt.getNewDocument(); boolean mainChanged = evt.isMainReportChanged(); documentChangedHelper(oldDoc, newDoc, mainChanged); } public void documentChangedHelper(IReportClientDocument oldReport, IReportClientDocument newReport, boolean mainChanged) { if (mainChanged) { if (oldReport != null) oldReport.getMainReport().removeAdvancedClientDocumentEventListener(this); if (newReport != null) newReport.getMainReport().addAdvancedClientDocumentEventListener(this); if (newReport == null) return; IDataDefinition definition = null; try { definition = newReport.getDataDefController().getDataDefinition(); } catch(ReportSDKException e) { e.printStackTrace(); } if (definition != null) { Fields parameters; parameters = definition.getParameterFields(); listViewer.setInput(parameters); } else { listViewer.setInput(null); } } } public void onAdded(AdvancedClientDocumentEvent event) { listViewer.refresh(); } public void onChanged(AdvancedClientDocumentEvent event) { listViewer.refresh(); } public void onRemoved(AdvancedClientDocumentEvent event) { listViewer.refresh(); } public void doSave(IProgressMonitor monitor){} public void doSaveAs(){} public boolean isDirty(){return false;} public boolean isSaveAsAllowed(){return false;} public void setFocus(){} }
SAP BusinessObjects http://www.sap.com/sapbusinessobjects/ Support services http://service.sap.com/bosap-support/ Product Documentation on the Web http://help.sap.com/ |