/*******************************************************************************
* Copyright (c) 2012, 2014 Wind River Systems, Inc. and others. 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:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.tcf.te.ui.controls;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.dialogs.IDialogPage;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.fieldassist.FieldDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.tcf.te.ui.controls.nls.Messages;
/**
* AbstractDecoratedDialogPageControl
*/
public abstract class AbstractDecoratedDialogPageControl extends BaseDialogPageControl {
private ControlDecoration controlDecoration;
/**
* Constructor.
*/
public AbstractDecoratedDialogPageControl() {
}
/**
* Constructor.
* @param parentPage
*/
public AbstractDecoratedDialogPageControl(IDialogPage parentPage) {
super(parentPage);
}
/**
* Creates a new instance of a {@link ControlDecoration} object associated with
* the given control. The method is called after the control has been created.
*
* @param control The control. Must not be <code>null</code>.
* @param parent The SWT composite within which the decoration should be rendered. Must not be <code>null</code>.
* @return The control decoration object instance.
*/
public ControlDecoration doCreateControlDecoration(Control control, Composite parent) {
Assert.isNotNull(control);
controlDecoration = new ControlDecoration(control, doGetControlDecorationPosition(), parent);
return controlDecoration;
}
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.controls.BaseControl#dispose()
*/
@Override
public void dispose() {
super.dispose();
controlDecoration = null;
}
/**
* Returns the control decoration position. The default is
* {@link SWT#TOP} | {@link SWT#LEFT}.
*
* @return The control position.
*/
protected int doGetControlDecorationPosition() {
return SWT.TOP | SWT.LEFT;
}
/**
* Configure the given control decoration.
*
* @param decoration The control decoration. Must not be <code>null</code>.
*/
protected void configureControlDecoration(ControlDecoration decoration) {
Assert.isNotNull(decoration);
decoration.setShowOnlyOnFocus(false);
}
/**
* Updates the control decoration to represent the given message and message type.
* If the message is <code>null</code> or the message type is IMessageProvider.NONE,
* no decoration will be shown.
*
* @param message The message.
* @param messageType The message type.
*/
public void updateControlDecoration(String message, int messageType) {
if (getControlDecoration() != null) {
// The description is the same as the message
getControlDecoration().setDescriptionText(message);
// The icon depends on the message type
FieldDecorationRegistry registry = FieldDecorationRegistry.getDefault();
// Determine the id of the decoration to show
String decorationId = FieldDecorationRegistry.DEC_INFORMATION;
if (messageType == IMessageProvider.ERROR) {
decorationId = FieldDecorationRegistry.DEC_ERROR;
} else if (messageType == IMessageProvider.WARNING) {
decorationId = FieldDecorationRegistry.DEC_WARNING;
}
// Get the field decoration
FieldDecoration fieldDeco = registry.getFieldDecoration(decorationId);
if (fieldDeco != null) {
getControlDecoration().setImage(fieldDeco.getImage());
}
if (message == null || messageType == IMessageProvider.NONE) {
if (!hasContentAssist()) {
getControlDecoration().hide();
}
else {
fieldDeco = registry.getFieldDecoration(FieldDecorationRegistry.DEC_CONTENT_PROPOSAL);
if (fieldDeco != null) {
getControlDecoration().setDescriptionText(Messages.AbstractDecoratedDialogPageControl_contentAssist_message);
getControlDecoration().setImage(fieldDeco.getImage());
getControlDecoration().show();
}
}
}
else {
getControlDecoration().show();
}
}
}
/**
* Returns the control decoration.
*
* @return The control decoration instance or <code>null</code> if not yet created.
*/
public final ControlDecoration getControlDecoration() {
return controlDecoration;
}
protected boolean hasContentAssist() {
return false;
}
}