/* * Copyright (c) 2010, grossmann * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the jo-widgets.org nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL jo-widgets.org BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ package org.jowidgets.impl.base.delegate; import org.jowidgets.api.model.item.IItemModel; import org.jowidgets.api.model.item.IItemModelListener; import org.jowidgets.common.image.IImageConstant; import org.jowidgets.common.types.Accelerator; import org.jowidgets.impl.widgets.common.wrapper.invoker.IItemSpiInvoker; import org.jowidgets.util.Assert; import org.jowidgets.util.NullCompatibleEquivalence; public class ItemModelBindingDelegate { private final IItemSpiInvoker widget; private final IItemModelListener itemModelListener; private String text; private String toolTipText; private IImageConstant icon; private Accelerator accelerator; private Character mnemonic; private boolean enabled; private IItemModel model; public ItemModelBindingDelegate(final IItemSpiInvoker widget, final IItemModel model) { Assert.paramNotNull(model, "model"); this.itemModelListener = new IItemModelListener() { @Override public void itemChanged(final IItemModel item) { updateFromModel(); } }; this.widget = widget; this.model = model; this.enabled = true; updateFromModel(); } public IItemSpiInvoker getWidget() { return widget; } public IItemModel getModel() { return model; } public void dispose() { unRegisterModel(); } public void setText(final String text) { setTextValue(text); unRegisterModel(); model.setText(text); registerModel(); } public void setToolTipText(final String toolTipText) { setToolTipTextValue(toolTipText); unRegisterModel(); model.setToolTipText(toolTipText); registerModel(); } public void setIcon(final IImageConstant icon) { setIconValue(icon); unRegisterModel(); model.setIcon(icon); registerModel(); } public void setAccelerator(final Accelerator accelerator) { setAcceleratorValue(accelerator); unRegisterModel(); model.setAccelerator(accelerator); registerModel(); } public void setMnemonic(final Character mnemonic) { setMnemonicValue(mnemonic); unRegisterModel(); model.setMnemonic(mnemonic); registerModel(); } public void setEnabled(final boolean enabled) { setEnabledValue(enabled); unRegisterModel(); model.setEnabled(enabled); registerModel(); } public String getText() { return text; } public String getToolTipText() { return toolTipText; } public IImageConstant getIcon() { return icon; } public Accelerator getAccelerator() { return accelerator; } public Character getMnemonic() { return mnemonic; } public boolean isEnabled() { return enabled; } public void setModel(final IItemModel model) { if (this.model != null) { model.removeItemModelListener(itemModelListener); } this.model = model; updateFromModel(); registerModel(); } protected final void registerModel() { model.addItemModelListener(itemModelListener); } protected final void unRegisterModel() { model.removeItemModelListener(itemModelListener); } protected void updateFromModel() { setTextValue(model.getText()); setToolTipTextValue(model.getToolTipText()); setIconValue(model.getIcon()); setAcceleratorValue(model.getAccelerator()); setMnemonicValue(model.getMnemonic()); setEnabledValue(model.isEnabled()); } private void setTextValue(final String text) { if (!NullCompatibleEquivalence.equals(this.text, text)) { this.text = text; getWidget().setText(text); } } private void setToolTipTextValue(final String toolTipText) { if (!NullCompatibleEquivalence.equals(this.toolTipText, toolTipText)) { this.toolTipText = toolTipText; getWidget().setToolTipText(toolTipText); } } private void setIconValue(final IImageConstant icon) { if (this.icon != icon) { this.icon = icon; getWidget().setIcon(icon); } } private void setAcceleratorValue(final Accelerator accelerator) { if (!NullCompatibleEquivalence.equals(this.accelerator, accelerator)) { if (accelerator != null) { this.accelerator = accelerator; getWidget().setAccelerator(accelerator); } } } private void setMnemonicValue(final Character mnemonic) { if (!NullCompatibleEquivalence.equals(this.mnemonic, mnemonic)) { this.mnemonic = mnemonic; getWidget().setMnemonic(mnemonic); } } private void setEnabledValue(final boolean enabled) { if (this.enabled != enabled) { this.enabled = enabled; getWidget().setEnabled(enabled); } } }