/** * */ package org.nightlabs.jfire.reporting.trade.ui.textpart; import javax.jdo.JDOHelper; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; 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.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.nightlabs.base.ui.composite.XComboComposite; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.composite.XComposite.LayoutDataMode; import org.nightlabs.base.ui.composite.XComposite.LayoutMode; import org.nightlabs.base.ui.editor.ToolBarSectionPart; import org.nightlabs.base.ui.job.Job; import org.nightlabs.base.ui.language.LanguageChooserCombo; import org.nightlabs.base.ui.table.TableLabelProvider; import org.nightlabs.jfire.reporting.layout.ReportRegistryItem; import org.nightlabs.jfire.reporting.layout.id.ReportRegistryItemID; import org.nightlabs.jfire.reporting.textpart.ReportTextPartConfiguration; import org.nightlabs.jfire.reporting.trade.ui.resource.Messages; import org.nightlabs.jfire.reporting.ui.textpart.IReportTextPartConfigurationChangedListener; import org.nightlabs.jfire.reporting.ui.textpart.ReportTextPartConfigurationChangedEvent; import org.nightlabs.jfire.reporting.ui.textpart.ReportTextPartConfigurationEditComposite; import org.nightlabs.progress.ProgressMonitor; /** * @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de --> * */ public class ReportTextPartConfigurationSection extends ToolBarSectionPart { private ReportTextPartConfigurationPageController controller; private XComboComposite<ReportRegistryItem> reportItemCombo; private ReportTextPartConfigurationEditComposite configurationEditComposite; private LanguageChooserCombo languageChooser; /** * @param page * @param parent * @param style * @param title */ public ReportTextPartConfigurationSection(FormPage page, Composite parent, final ReportTextPartConfigurationPageController controller) { super( page, parent, ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR, Messages.getString("org.nightlabs.jfire.reporting.trade.ui.textpart.ReportTextPartConfigurationSection.title") //$NON-NLS-1$ ); this.controller = controller; getSection().setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); getSection().setLayout(new GridLayout()); XComposite client = new XComposite(getSection(), SWT.NONE, LayoutMode.TIGHT_WRAPPER); client.getGridLayout().numColumns = 1; getSection().setClient(client); XComposite header = new XComposite(client, SWT.NONE, LayoutDataMode.GRID_DATA_HORIZONTAL); GridLayout layout = new GridLayout(2, false); XComposite.configureLayout(LayoutMode.TIGHT_WRAPPER, layout); header.setLayout(layout); reportItemCombo = new XComboComposite<ReportRegistryItem>( header, SWT.READ_ONLY, Messages.getString("org.nightlabs.jfire.reporting.trade.ui.textpart.ReportTextPartConfigurationSection.reportItemCombo.caption"), //$NON-NLS-1$ new TableLabelProvider() { @Override public String getColumnText(Object element, int columnIndex) { return ((ReportRegistryItem) element).getName().getText(); } }); reportItemCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_END)); languageChooser = new LanguageChooserCombo(header); languageChooser.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_END)); configurationEditComposite = new ReportTextPartConfigurationEditComposite(client, SWT.NONE, languageChooser, false); configurationEditComposite.addReportTextPartConfigurationChangedListener(new IReportTextPartConfigurationChangedListener() { @Override public void reportTextPartConfigurationChanged(ReportTextPartConfigurationChangedEvent evt) { controller.markDirty(evt.getReportTextPartConfiguration()); markDirty(); } }); reportItemCombo.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { updateConfiguration(); } }); } @Override public void commit(boolean onSave) { super.commit(onSave); configurationEditComposite.updateReportTextPartConfiguration(); } private void updateConfiguration() { ReportRegistryItem selection = reportItemCombo.getSelectedElement(); if (selection != null) loadReportTextPartConfiguration(selection); } public void updateReportRegistryItems() { reportItemCombo.setInput(controller.getReportRegistryItems()); if (controller.getDefaultReportRegistryItem() != null) reportItemCombo.selectElement(controller.getDefaultReportRegistryItem()); updateConfiguration(); } protected void setReportTextPartConfiguration(ReportTextPartConfiguration reportTextPartConfiguration) { configurationEditComposite.setReportTextPartConfiguration(reportTextPartConfiguration); } protected void loadReportTextPartConfiguration(final ReportRegistryItem reportRegistryItem) { configurationEditComposite.setEnabled(false); Job loadJob = new Job(Messages.getString("org.nightlabs.jfire.reporting.trade.ui.textpart.ReportTextPartConfigurationSection.loadJob.name")) { //$NON-NLS-1$ @Override protected IStatus run(ProgressMonitor monitor) throws Exception { ReportRegistryItemID reportRegistryItemID = (ReportRegistryItemID) JDOHelper.getObjectId(reportRegistryItem); final ReportTextPartConfiguration config = controller.getReportTextPartConfiguration(reportRegistryItemID, monitor); getSection().getDisplay().asyncExec(new Runnable() { public void run() { configurationEditComposite.setEnabled(true); setReportTextPartConfiguration(config); } }); return Status.OK_STATUS; } }; loadJob.schedule(); } }