/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Eclipse Public License, Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.eclipse.org/org/documents/epl-v10.php * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.ide.eclipse.editors.uimodel; import com.android.ide.eclipse.editors.descriptors.AttributeDescriptor; import com.android.ide.eclipse.editors.descriptors.SeparatorAttributeDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; import org.w3c.dom.Node; /** * {@link UiSeparatorAttributeNode} does not represent any real attribute. * <p/> * It is used to separate groups of attributes visually. */ public class UiSeparatorAttributeNode extends UiAttributeNode { /** Creates a new {@link UiAttributeNode} linked to a specific {@link AttributeDescriptor} */ public UiSeparatorAttributeNode(SeparatorAttributeDescriptor attrDesc, UiElementNode uiParent) { super(attrDesc, uiParent); } /** Returns the current value of the node. */ @Override public String getCurrentValue() { // There is no value here. return null; } /** * Sets whether the attribute is dirty and also notifies the editor some part's dirty * flag as changed. * <p/> * Subclasses should set the to true as a result of user interaction with the widgets in * the section and then should set to false when the commit() method completed. */ @Override public void setDirty(boolean isDirty) { // This is never dirty. } /** * Called once by the parent user interface to creates the necessary * user interface to edit this attribute. * <p/> * This method can be called more than once in the life cycle of an UI node, * typically when the UI is part of a master-detail tree, as pages are swapped. * * @param parent The composite where to create the user interface. * @param managedForm The managed form owning this part. */ @Override public void createUiControl(Composite parent, IManagedForm managedForm) { FormToolkit toolkit = managedForm.getToolkit(); Composite row = toolkit.createComposite(parent); TableWrapData twd = new TableWrapData(TableWrapData.FILL_GRAB); if (parent.getLayout() instanceof TableWrapLayout) { twd.colspan = ((TableWrapLayout) parent.getLayout()).numColumns; } row.setLayoutData(twd); row.setLayout(new GridLayout(3, false /* equal width */)); Label sep = toolkit.createSeparator(row, SWT.HORIZONTAL); GridData gd = new GridData(SWT.LEFT, SWT.CENTER, false, false); gd.widthHint = 16; sep.setLayoutData(gd); Label label = toolkit.createLabel(row, getDescriptor().getXmlLocalName()); label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false)); sep = toolkit.createSeparator(row, SWT.HORIZONTAL); sep.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); } /** * No completion values for this UI attribute. * * {@inheritDoc} */ @Override public String[] getPossibleValues(String prefix) { return null; } /** * Called when the XML is being loaded or has changed to * update the value held by this user interface attribute node. * <p/> * The XML Node <em>may</em> be null, which denotes that the attribute is not * specified in the XML model. In general, this means the "default" value of the * attribute should be used. * <p/> * The caller doesn't really know if attributes have changed, * so it will call this to refresh the attribute anyway. It's up to the * UI implementation to minimize refreshes. * * @param xml_attribute_node */ @Override public void updateValue(Node xml_attribute_node) { // No value to update. } /** * Called by the user interface when the editor is saved or its state changed * and the modified attributes must be committed (i.e. written) to the XML model. * <p/> * Important behaviors: * <ul> * <li>The caller *must* have called IStructuredModel.aboutToChangeModel before. * The implemented methods must assume it is safe to modify the XML model. * <li>On success, the implementation *must* call setDirty(false). * <li>On failure, the implementation can fail with an exception, which * is trapped and logged by the caller, or do nothing, whichever is more * appropriate. * </ul> */ @Override public void commit() { // No value to commit. } }