blob: 69bb455e3eba8a8361547aa1141a288b1d292dfc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 Google, Inc.
* 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:
* Google, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.wb.internal.core.model.property;
import org.eclipse.wb.internal.core.model.property.editor.TextDisplayPropertyEditor;
import org.eclipse.wb.internal.core.model.property.editor.complex.IComplexPropertyEditor;
import org.eclipse.wb.internal.core.model.property.editor.presentation.PropertyEditorPresentation;
import org.eclipse.wb.internal.core.model.property.table.PropertyTable;
import org.eclipse.wb.internal.core.model.property.table.PropertyTooltipProvider;
import org.eclipse.wb.internal.core.model.property.table.PropertyTooltipTextProvider;
import org.eclipse.swt.graphics.Point;
import java.util.List;
/**
* Implementation of {@link Property} that shows given inner {@link Property}'s using
* {@link IComplexPropertyEditor}.
*
* @author scheglov_ke
* @coverage core.model.property
*/
public class ComplexProperty extends Property {
private final String m_title;
private String m_text;
private String m_tooltip;
private boolean m_modified;
private Property[] m_properties;
////////////////////////////////////////////////////////////////////////////
//
// Constructors
//
////////////////////////////////////////////////////////////////////////////
public ComplexProperty(String title, String text) {
this(title, text, new Property[0]);
}
public ComplexProperty(String title, String text, Property[] properties) {
super(new ComplexPropertyEditor());
m_title = title;
m_text = text;
setText(text);
setProperties(properties);
}
////////////////////////////////////////////////////////////////////////////
//
// Access
//
////////////////////////////////////////////////////////////////////////////
/**
* Sets the text.
*/
public void setText(String text) {
m_text = text;
}
/**
* @return the text to display as value.
*/
public String getText() throws Exception {
return m_text;
}
/**
* Sets the tooltip text.
*/
public void setTooltip(String tooltip) {
m_tooltip = tooltip;
}
/**
* Specifies the {@link PropertyEditorPresentation}, for example to displaying "..." button.
*/
public void setEditorPresentation(PropertyEditorPresentation presentation) {
((ComplexPropertyEditor) getEditor()).m_presentation = presentation;
}
/**
* @return the sub-properties.
*/
public Property[] getProperties() {
return m_properties;
}
/**
* Sets the sub-properties.
*/
public void setProperties(Property[] properties) {
m_properties = properties;
}
/**
* Sets the sub-properties.
*/
public void setProperties(List<Property> properties) {
Property[] propertiesArray = properties.toArray(new Property[properties.size()]);
setProperties(propertiesArray);
}
/**
* Sets the "modified" flag.
*/
public void setModified(boolean modified) {
m_modified = modified;
}
////////////////////////////////////////////////////////////////////////////
//
// Property
//
////////////////////////////////////////////////////////////////////////////
@Override
public String getTitle() {
return m_title;
}
@Override
public boolean isModified() throws Exception {
return m_modified;
}
@Override
public Object getValue() throws Exception {
return null;
}
@Override
public void setValue(Object value) throws Exception {
}
////////////////////////////////////////////////////////////////////////////
//
// Adapter
//
////////////////////////////////////////////////////////////////////////////
@Override
public <T> T getAdapter(Class<T> adapter) {
if (adapter == PropertyTooltipProvider.class && m_tooltip != null) {
return adapter.cast(new PropertyTooltipTextProvider() {
@Override
protected String getText(Property property) throws Exception {
return m_tooltip;
}
});
}
return super.getAdapter(adapter);
}
////////////////////////////////////////////////////////////////////////////
//
// ComplexPropertyEditor
//
////////////////////////////////////////////////////////////////////////////
private static final class ComplexPropertyEditor extends TextDisplayPropertyEditor
implements
IComplexPropertyEditor {
private PropertyEditorPresentation m_presentation;
////////////////////////////////////////////////////////////////////////////
//
// IComplexPropertyEditor
//
////////////////////////////////////////////////////////////////////////////
public Property[] getProperties(Property property) throws Exception {
return ((ComplexProperty) property).getProperties();
}
////////////////////////////////////////////////////////////////////////////
//
// TextDisplayPropertyEditor
//
////////////////////////////////////////////////////////////////////////////
@Override
protected String getText(Property property) throws Exception {
return ((ComplexProperty) property).getText();
}
////////////////////////////////////////////////////////////////////////////
//
// PropertyEditor
//
////////////////////////////////////////////////////////////////////////////
@Override
public boolean activate(PropertyTable propertyTable, Property property, Point location)
throws Exception {
return false;
}
////////////////////////////////////////////////////////////////////////////
//
// Presentation
//
////////////////////////////////////////////////////////////////////////////
@Override
public PropertyEditorPresentation getPresentation() {
return m_presentation;
}
}
}