package org.nightlabs.jfire.trade.admin.ui.editor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.editor.IFormPage; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.editor.ToolBarSectionPart; import org.nightlabs.base.ui.entity.editor.EntityEditorUtil; import org.nightlabs.jfire.accounting.Currency; import org.nightlabs.jfire.trade.admin.ui.resource.Messages; /** * * @author vince * */ public class CurrencySection extends ToolBarSectionPart { private CurrencyEditorPageController controller; private Label currencyIdLabel; private Label symbolLabel; private Text symbolShowText; private Text currencyIdText; private Currency currency; private boolean ignoreModifyEvents = false; public CurrencySection(IFormPage page, Composite parent,final CurrencyEditorPageController controller ) { super(page, parent, ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE, "Currency"); this.controller = controller; getSection().setExpanded(true); createClient(getSection(), page.getEditor().getToolkit()); } @Override public boolean setFormInput(Object input) { this.currency=(Currency)input; return super.setFormInput(input); } @Override public void refresh() { ignoreModifyEvents = true; try { if (currency == null) return; // data not yet loaded => silently ignore // put data from this.currency into UI symbolShowText.setText(currency.getCurrencySymbol()); super.refresh(); } finally { ignoreModifyEvents = false; } } @Override public void commit(boolean onSave) { super.commit(onSave); currency.setCurrencySymbol(symbolShowText.getText()); controller.fireModifyEvent(null, currency, false); } protected void createClient(Section section, FormToolkit toolkit) { section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Composite container = EntityEditorUtil.createCompositeClient(toolkit, section, 1); createCurrency(container,2); } private void createCurrency(Composite container, int span){ createCurrencyIdLabel( container,1); createcurrencyIdShowText(container); createsymbolLabel(container,1); createsymbolShowText(container); } private void createcurrencyIdShowText(Composite container){ currencyIdText = new Text(container, XComposite.getBorderStyle(container)); currencyIdText.setText(controller.getControllerObject().getCurrencyID()); currencyIdText.setEditable(false); GridData gd = new GridData(GridData.FILL_HORIZONTAL); currencyIdText.setLayoutData(gd); currencyIdText.addModifyListener(new ModifyListener(){ @Override public void modifyText(ModifyEvent e) { if (ignoreModifyEvents) return; markDirty(); } }); } private void createsymbolShowText(Composite container){ symbolShowText = new Text(container, XComposite.getBorderStyle(container)); symbolShowText.setText(controller.getControllerObject().getCurrencySymbol()); GridData gd = new GridData(GridData.FILL_HORIZONTAL); symbolShowText.setLayoutData(gd); symbolShowText.addModifyListener(new ModifyListener(){ @Override public void modifyText(ModifyEvent e) { if (ignoreModifyEvents) return; markDirty(); } }); } private void createCurrencyIdLabel(Composite container, int span){ currencyIdLabel=new Label(container, SWT.LEFT); currencyIdLabel.setText(Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.CurrencySection.label.currencyid.text")); GridData grid=new GridData(GridData.FILL_HORIZONTAL); grid.horizontalSpan=span; currencyIdLabel.setLayoutData(grid); } private void createsymbolLabel(Composite container, int span){ symbolLabel=new Label(container, SWT.LEFT); symbolLabel.setText(Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.CurrencySection.label.currencysymbol.text")); GridData grid=new GridData(GridData.FILL_HORIZONTAL); grid.horizontalSpan=span; symbolLabel.setLayoutData(grid); } }