package org.nightlabs.jfire.voucher.editor2d.ui.dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.composite.XComposite.LayoutMode; import org.nightlabs.base.ui.tree.AbstractTreeComposite; import org.nightlabs.base.ui.util.RCPUtil; import org.nightlabs.eclipse.ui.dialog.ResizableTrayDialog; import org.nightlabs.jfire.store.ProductType; import org.nightlabs.jfire.voucher.admin.ui.tree.VoucherTypeTree; import org.nightlabs.jfire.voucher.admin.ui.tree.VoucherTypeTreeNode; import org.nightlabs.jfire.voucher.editor2d.ui.VoucherDetailComposite; import org.nightlabs.jfire.voucher.editor2d.ui.resource.Messages; import org.nightlabs.jfire.voucher.editor2d.ui.scripting.VoucherScriptResultProvider; import org.nightlabs.jfire.voucher.scripting.PreviewParameterValuesResult; import org.nightlabs.jfire.voucher.store.VoucherType; /** * @author Daniel.Mazurek [at] NightLabs [dot] de * */ public class VoucherChooseDialog extends ResizableTrayDialog { /** * @param parentShell */ public VoucherChooseDialog(Shell parentShell) { super(parentShell, Messages.RESOURCE_BUNDLE); setShellStyle(getShellStyle() | SWT.RESIZE); } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(Messages.getString("org.nightlabs.jfire.voucher.editor2d.ui.dialog.VoucherChooseDialog.title")); //$NON-NLS-1$ } private VoucherTypeTree voucherTypeTree = null; private Group detailGroup = null; private VoucherDetailComposite detailComp = null; @Override protected Control createDialogArea(Composite parent) { Composite comp = new XComposite(parent, SWT.NONE, LayoutMode.TIGHT_WRAPPER); comp.setLayout(new GridLayout(2, false)); SashForm sash = new SashForm(comp, SWT.HORIZONTAL); sash.setLayout(new GridLayout()); sash.setLayoutData(new GridData(GridData.FILL_BOTH)); // Voucher Group voucherGroup = new Group(sash, SWT.NONE); voucherGroup.setText(Messages.getString("org.nightlabs.jfire.voucher.editor2d.ui.dialog.VoucherChooseDialog.group.voucher")); //$NON-NLS-1$ voucherGroup.setLayout(new GridLayout()); voucherGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); voucherTypeTree = new VoucherTypeTree(voucherGroup, AbstractTreeComposite.DEFAULT_STYLE_SINGLE | SWT.BORDER); voucherTypeTree.addSelectionChangedListener(voucherSelectionListener); voucherTypeTree.getTreeViewer().addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { Object firstElement = ((StructuredSelection) event.getSelection()).getFirstElement(); if (firstElement instanceof VoucherTypeTreeNode) { VoucherTypeTreeNode voucherTypeTreeNode = (VoucherTypeTreeNode) firstElement; VoucherType selectedVoucherType = voucherTypeTreeNode.getJdoObject(); if (selectedVoucherType.getInheritanceNature() == ProductType.INHERITANCE_NATURE_BRANCH) { if (voucherTypeTree.getTreeViewer().getExpandedState(voucherTypeTreeNode)) voucherTypeTree.getTreeViewer().collapseToLevel(voucherTypeTreeNode, 1); else voucherTypeTree.getTreeViewer().expandToLevel(voucherTypeTreeNode, 1); } if (selectedVoucherType.getInheritanceNature() == ProductType.INHERITANCE_NATURE_LEAF) { if (getButton(IDialogConstants.OK_ID).isEnabled()) okPressed(); } } } }); // voucherTypeTree.getTreeViewer().expandToLevel(2); // Voucher Details detailGroup = new Group(sash, SWT.NONE); detailGroup.setText(Messages.getString("org.nightlabs.jfire.voucher.editor2d.ui.dialog.VoucherChooseDialog.group.details")); //$NON-NLS-1$ detailGroup.setLayout(new GridLayout()); detailGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); detailComp = new VoucherDetailComposite(detailGroup, SWT.NONE); // By default deactivate all details until an event has been selected RCPUtil.setControlEnabledRecursive(detailGroup, false); return comp; } private ISelectionChangedListener voucherSelectionListener = new ISelectionChangedListener(){ public void selectionChanged(SelectionChangedEvent event) { if (!event.getSelection().isEmpty()) { Object firstElement = ((StructuredSelection) event.getSelection()).getFirstElement(); if (firstElement instanceof VoucherTypeTreeNode) { VoucherTypeTreeNode voucherTypeTreeNode = (VoucherTypeTreeNode) firstElement; VoucherType selectedVoucherType = voucherTypeTreeNode.getJdoObject(); if (selectedVoucherType.getInheritanceNature() == ProductType.INHERITANCE_NATURE_LEAF) { PreviewParameterValuesResult ppvr = VoucherScriptResultProvider.sharedInstance(). getPreviewParameterValuesResult(selectedVoucherType); detailComp.setPreviewParameterValuesResult(ppvr); RCPUtil.setControlEnabledRecursive(detailGroup, true); getButton(IDialogConstants.OK_ID).setEnabled(true); } else { detailComp.setPreviewParameterValuesResult(null); RCPUtil.setControlEnabledRecursive(detailGroup, false); getButton(IDialogConstants.OK_ID).setEnabled(false); } } } } }; @Override protected void createButtonsForButtonBar(Composite parent) { super.createButtonsForButtonBar(parent); getButton(IDialogConstants.OK_ID).setEnabled(false); } @Override protected void okPressed() { VoucherScriptResultProvider.sharedInstance().setSelectedCurrency( detailComp.getSelectedCurrency()); StructuredSelection selection = (StructuredSelection) voucherTypeTree.getSelection(); VoucherTypeTreeNode voucherTypeTreeNode = (VoucherTypeTreeNode) selection.getFirstElement(); VoucherType voucherType = voucherTypeTreeNode.getJdoObject(); VoucherScriptResultProvider.sharedInstance().setSelectedObject(voucherType); super.okPressed(); } }