blob: 8be981398a796de3fe6a3f0a267155b50a081ad1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.common.ui.internal.util;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jpt.common.ui.internal.listeners.SWTPropertyChangeListenerWrapper;
import org.eclipse.jpt.common.utility.model.event.PropertyChangeEvent;
import org.eclipse.jpt.common.utility.model.listener.PropertyChangeListener;
import org.eclipse.jpt.common.utility.model.value.PropertyValueModel;
import org.eclipse.swt.graphics.Image;
/**
* This updater is responsible to update the <code>LabeledControl</code> when
* the text and the icon need to change.
*
* @version 2.0
* @since 2.0
*/
@SuppressWarnings("nls")
public final class LabeledControlUpdater {
/**
* The wrapper around a control that has text and icon.
*/
private LabeledControl labeledControl;
/**
* Creates a new <code>LabeledControlUpdater</code>.
*
* @param labeledControl The wrapper around the control that needs to
* have its text updated
* @param textHolder The holder this class will listen for changes
*/
public LabeledControlUpdater(LabeledControl labeledControl,
PropertyValueModel<String> textHolder)
{
this(labeledControl, textHolder, null);
}
/**
* Creates a new <code>LabeledControlUpdater</code>.
*
* @param labeledControl The wrapper around the control that needs to
* have its image and text updated
* @param imageHolder The holder this class will listen for changes or
* <code>null</code> if the text never changes
* @param textHolder The holder this class will listen for changes or
* <code>null</code> if the image never changes
*/
public LabeledControlUpdater(LabeledControl labeledControl,
PropertyValueModel<String> textHolder,
PropertyValueModel<Image> imageHolder)
{
super();
initialize(labeledControl, textHolder, imageHolder);
}
private PropertyChangeListener buildIconListener() {
return new SWTPropertyChangeListenerWrapper(buildIconListener_());
}
private PropertyChangeListener buildIconListener_() {
return new PropertyChangeListener() {
public void propertyChanged(PropertyChangeEvent e) {
LabeledControlUpdater.this.setImage((Image) e.getNewValue());
}
@Override
public String toString() {
return "LabeledControlUpdater.imageListener";
}
};
}
private PropertyChangeListener buildTextListener() {
return new SWTPropertyChangeListenerWrapper(buildTextListener_());
}
private PropertyChangeListener buildTextListener_() {
return new PropertyChangeListener() {
public void propertyChanged(PropertyChangeEvent e) {
LabeledControlUpdater.this.setText((String) e.getNewValue());
}
@Override
public String toString() {
return "LabeledControlUpdater.textListener";
}
};
}
private void initialize(LabeledControl labeledControl,
PropertyValueModel<String> textHolder,
PropertyValueModel<Image> imageHolder)
{
Assert.isNotNull(labeledControl, "The LabeledControl cannot be null");
this.labeledControl = labeledControl;
if (textHolder != null) {
textHolder.addPropertyChangeListener(PropertyValueModel.VALUE, buildTextListener());
setText(textHolder.getValue());
}
if (imageHolder != null) {
imageHolder.addPropertyChangeListener(PropertyValueModel.VALUE, buildIconListener());
setImage(imageHolder.getValue());
}
}
private void setImage(Image icon) {
labeledControl.setImage(icon);
}
private void setText(String text) {
if (text == null) {
text = "";
}
labeledControl.setText(text);
}
}