/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.editor.form; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import org.jboss.tools.common.model.ui.attribute.XAttributeSupport; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.jboss.tools.common.meta.XAttribute; import org.jboss.tools.common.meta.action.XEntityData; import org.jboss.tools.common.meta.action.impl.XEntityDataImpl; import org.jboss.tools.common.model.XModelObject; import org.jboss.tools.common.model.ui.forms.ExpandableForm; import org.jboss.tools.common.model.ui.widgets.DefaultSettings; import org.jboss.tools.common.model.ui.widgets.IWidgetSettings; import org.jboss.tools.common.model.ui.widgets.WhiteSettings; import org.jboss.tools.common.util.SwtUtil; public class SamplePropertyForm extends ExpandableForm implements PropertyChangeListener { private XAttributeSupport support; private XModelObject xmo; private IWidgetSettings settings; private boolean isGreedy = false; public SamplePropertyForm() { settings = WhiteSettings.getWhite(); support = new SampleXAttributeSupport(settings); support.addPropertyChangeListener(this); } public void dispose() { super.dispose(); if (support!=null) support.dispose(); support = null; } class SampleXAttributeSupport extends XAttributeSupport { SampleXAttributeSupport(IWidgetSettings settings) { super(settings); } protected boolean keepGreedy(String name, int index, int greedyCount) { return alwaysGreedy.contains(name); } } protected Control createClientArea(Composite parent, IWidgetSettings factory) { Composite composite = new Composite(parent, SWT.NONE); settings.setupControl(composite); //factory.paintBordersFor(composite); GridLayout layout = new GridLayout(2,Boolean.FALSE.booleanValue()); layout.horizontalSpacing = 5; layout.verticalSpacing = 5; layout.marginHeight = 5; layout.marginWidth = 5; composite.setLayout(layout); if(isGreedy) { composite.setLayoutData(new GridData(GridData.FILL_BOTH)); } String elementType = xmo.getAttributeValue("element type"); //$NON-NLS-1$ if(elementType != null) { Label label = new Label(composite, SWT.NONE); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = layout.numColumns; label.setLayoutData(gd); label.setText(elementType); label.setBackground(composite.getBackground()); Font f = label.getFont(); FontData[] d = f.getFontData(); for (int i = 0; i < d.length; i++) d[i].setStyle(SWT.BOLD); f = new Font(null, d); label.setFont(f); SwtUtil.bindDisposal(f, label); } updateEnablement(); support.fillComposite(composite); return composite; } public void initialize(Object model) { this.xmo = (XModelObject)model; this.model = xmo.getModel(); XEntityData data = createEntityData(); if(data != null) { support.init(xmo, data, true); } else { support.init(xmo); } isGreedy = false; XAttribute[] as = xmo.getModelEntity().getAttributes(); for (int i = 0; i < as.length && !isGreedy; i++) { if("always".equals(as[i].getProperty("greedy"))) isGreedy = true; //$NON-NLS-1$ //$NON-NLS-2$ } updateEnablement(); this.support.setAutoStore(Boolean.TRUE.booleanValue()); this.setHeadingText("Properties Editor"); } XEntityData createEntityData() { if(xmo == null) return null; ArrayList<String[]> list = new ArrayList<String[]>(); list.add(new String[]{xmo.getModelEntity().getName()}); XAttribute[] as = xmo.getModelEntity().getAttributes(); for (int i = 0; i < as.length; i++) { if("element type".equals(as[i].getName()) || !as[i].isVisible()) continue; //$NON-NLS-1$ list.add(new String[]{as[i].getName(), "no"}); } String[][] ss = list.toArray(new String[0][]); return XEntityDataImpl.create(ss); } public void update() { if (support!=null) { support.load(); } } public IWidgetSettings getSettings() { if (settings == null) settings = DefaultSettings.getDefault(); return settings; } public void setEnabled(boolean enabled) { super.setEnabled(enabled); updateEnablement(); } public void updateEnablement() { if (support != null) { support.updateEnablementByModelObject(); } } public void propertyChange(PropertyChangeEvent evt) { updateEnablement(); } /* (non-Javadoc) * @see org.jboss.tools.common.model.ui.forms.IForm#doGlobalAction(java.lang.String) */ public boolean doGlobalAction(String actionId) { return support.doGlobalAction(actionId); } }