| /******************************************************************************* |
| * Copyright (c) 2004, 2016 IBM Corporation 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: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.ui.internal.intro.impl.model; |
| |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.osgi.framework.Bundle; |
| import org.w3c.dom.Element; |
| |
| |
| /** |
| * An Intro Config component that has an id attribute and a style-id attribute. |
| * It also has the notion of filtering. Only model elements that have meaning in |
| * the UI, and that are targettable can be filtered. HEAD, for example, only |
| * applied to HTML presentation, and so, it does not need filtering. When model |
| * is first loaded, all elements are not filtered. When the UI is created, and |
| * we know which presentation we are using, the filter state is computed |
| * dynamically. Also, in the SWT presentation, when style manager picks |
| * elements, it may alter the filter state of a given element to prevent it from |
| * appearing twice in the ui. eg: title appearing as a title of the form, and as |
| * a title child text. |
| */ |
| public abstract class AbstractBaseIntroElement extends AbstractIntroIdElement { |
| |
| protected static final String ATT_STYLE_ID = "style-id"; //$NON-NLS-1$ |
| protected static final String ATT_FILTERED_FROM = "filteredFrom"; //$NON-NLS-1$ |
| |
| protected String style_id; |
| protected String filteredFrom; |
| private boolean isFiltered; |
| |
| AbstractBaseIntroElement(IConfigurationElement element) { |
| super(element); |
| style_id = element.getAttribute(ATT_STYLE_ID); |
| filteredFrom = element.getAttribute(ATT_FILTERED_FROM); |
| } |
| |
| AbstractBaseIntroElement(Element element, Bundle bundle) { |
| super(element, bundle); |
| style_id = getAttribute(element, ATT_STYLE_ID); |
| filteredFrom = getAttribute(element, ATT_FILTERED_FROM); |
| } |
| |
| /** |
| * Filter this element out based on the presentation kind. |
| * |
| */ |
| private boolean checkFilterState() { |
| if (this.isOfType(AbstractIntroElement.MODEL_ROOT)) |
| // root element is not filtered. |
| return false; |
| IntroModelRoot root = (IntroModelRoot) getParentPage().getParent(); |
| return root.getPresentation().getImplementationKind().equals( |
| filteredFrom) ? true : false; |
| } |
| |
| |
| /** |
| * @return Returns the class id. |
| */ |
| public String getStyleId() { |
| return style_id; |
| } |
| |
| @Override |
| protected void loadFromParent() { |
| style_id = getAttribute(getElement(), ATT_STYLE_ID); |
| filteredFrom = getAttribute(getElement(), ATT_FILTERED_FROM); |
| } |
| |
| /** |
| * @return Returns the filter_kind. |
| */ |
| public String getFilteredFrom() { |
| return filteredFrom; |
| } |
| |
| /** |
| * Return the filter state of this intro element. We need to do this when |
| * this element has been added to the model, and it has a parent. Also, this |
| * method will not be valid if the UI has not been loaded yet because it it |
| * the creation of the UI that determines the presentation details. |
| * |
| * @return Returns the isFiltered. |
| */ |
| public boolean isFiltered() { |
| return checkFilterState() || isFiltered; |
| } |
| |
| public void setFilterState(boolean state) { |
| isFiltered = state; |
| } |
| |
| |
| |
| } |