| /******************************************************************************* |
| * Copyright (c) 2011 BSI Business Systems Integration AG. |
| * 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: |
| * BSI Business Systems Integration AG - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.scout.rt.ui.rap.form.fields.treefield; |
| |
| import org.eclipse.rap.rwt.lifecycle.WidgetUtil; |
| import org.eclipse.scout.rt.client.ui.basic.tree.ITree; |
| import org.eclipse.scout.rt.client.ui.form.IForm; |
| import org.eclipse.scout.rt.client.ui.form.fields.smartfield.ISmartFieldProposalForm; |
| import org.eclipse.scout.rt.client.ui.form.fields.treefield.ITreeField; |
| import org.eclipse.scout.rt.ui.rap.LogicalGridLayout; |
| import org.eclipse.scout.rt.ui.rap.basic.tree.IRwtScoutTree; |
| import org.eclipse.scout.rt.ui.rap.basic.tree.RwtScoutTree; |
| import org.eclipse.scout.rt.ui.rap.ext.StatusLabelEx; |
| import org.eclipse.scout.rt.ui.rap.form.fields.LogicalGridDataBuilder; |
| import org.eclipse.scout.rt.ui.rap.form.fields.RwtScoutFieldComposite; |
| import org.eclipse.scout.rt.ui.rap.util.RwtUtility; |
| import org.eclipse.scout.rt.ui.rap.window.desktop.IRwtScoutActionBar; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Tree; |
| |
| /** |
| * @since 3.8.0 |
| */ |
| public class RwtScoutTreeField extends RwtScoutFieldComposite<ITreeField> implements IRwtScoutTreeField { |
| |
| private IRwtScoutTree m_treeComposite; |
| private Composite m_treeContainer; |
| private IRwtScoutActionBar m_actionBar; |
| |
| @Override |
| protected void initializeUi(Composite parent) { |
| Composite container = getUiEnvironment().getFormToolkit().createComposite(parent); |
| StatusLabelEx label = getUiEnvironment().getFormToolkit().createStatusLabel(container, getScoutObject()); |
| |
| setUiContainer(container); |
| setUiLabel(label); |
| // layout |
| container.setLayout(new LogicalGridLayout(1, 0)); |
| } |
| |
| @Override |
| public Tree getUiField() { |
| return (Tree) super.getUiField(); |
| } |
| |
| @Override |
| protected void attachScout() { |
| super.attachScout(); |
| setTreeFromScout(getScoutObject().getTree()); |
| } |
| |
| protected void setTreeFromScout(ITree tree) { |
| if (m_treeComposite != null) { |
| m_treeComposite.dispose(); |
| m_treeComposite = null; |
| } |
| |
| if (m_actionBar != null) { |
| m_actionBar.dispose(); |
| } |
| |
| if (tree != null) { |
| m_treeComposite = createRwtScoutTree(); |
| |
| IForm form = getScoutObject() == null ? null : getScoutObject().getForm(); |
| m_treeContainer = null; |
| if (form == null || |
| form instanceof ISmartFieldProposalForm || |
| IForm.VIEW_ID_OUTLINE.equals(form.getDisplayViewId())) { |
| m_treeComposite.createUiField(getUiContainer(), getScoutObject().getTree(), getUiEnvironment()); |
| m_treeComposite.getUiField().setLayoutData(LogicalGridDataBuilder.createField(getScoutObject().getGridData())); |
| } |
| //XXX somehow the tableContainer does absorb the mouse-clicks when used in the outline |
| else { |
| Composite treeContainer = new Composite(getUiContainer(), SWT.NONE); |
| treeContainer.setData(WidgetUtil.CUSTOM_VARIANT, VARIANT_TREE_CONTAINER); |
| treeContainer.setLayout(new LogicalGridLayout(1, 0)); |
| m_treeComposite.createUiField(treeContainer, getScoutObject().getTree(), getUiEnvironment()); |
| treeContainer.setLayoutData(LogicalGridDataBuilder.createField(getScoutObject().getGridData())); |
| m_treeContainer = treeContainer; |
| } |
| |
| m_actionBar = createRwtScoutActionBar(); |
| |
| setUiField(m_treeComposite.getUiField()); |
| } |
| getUiContainer().layout(true, true); |
| } |
| |
| /** |
| * @since 3.8.0 |
| */ |
| protected IRwtScoutTree createRwtScoutTree() { |
| if (getScoutObject().getForm() instanceof ISmartFieldProposalForm) { |
| return new RwtScoutTree(RwtUtility.VARIANT_PROPOSAL_FORM); |
| } |
| else { |
| return new RwtScoutTree(); |
| } |
| } |
| |
| /** |
| * As default there is no action bar. <br/> |
| * Subclasses can override this method to create one. |
| */ |
| protected IRwtScoutActionBar createRwtScoutActionBar() { |
| return null; |
| } |
| |
| /** |
| * complete override |
| */ |
| @Override |
| protected void setFieldEnabled(Control field, boolean b) { |
| if (hasUiTree()) { |
| m_treeComposite.setEnabledFromScout(b); |
| } |
| } |
| |
| protected boolean hasUiTree() { |
| return m_treeComposite != null && m_treeComposite.isCreated(); |
| } |
| |
| @Override |
| protected void setEnabledFromScout(boolean b) { |
| super.setEnabledFromScout(b); |
| // Workaround, because ":disabled" state seems to be ignored by RAP |
| if (m_treeContainer != null) { |
| m_treeContainer.setData(WidgetUtil.CUSTOM_VARIANT, (b ? VARIANT_TREE_CONTAINER : VARIANT_TREE_CONTAINER_DISABLED)); |
| } |
| } |
| |
| @Override |
| protected void handleScoutPropertyChange(String name, Object newValue) { |
| super.handleScoutPropertyChange(name, newValue); |
| if (name.equals(ITreeField.PROP_TREE)) { |
| setTreeFromScout((ITree) newValue); |
| } |
| } |
| } |