01: /*******************************************************************************
02: * Copyright (c) 2004, 2006 IBM Corporation and others.
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * IBM Corporation - initial API and implementation
10: *******************************************************************************/package org.eclipse.ui.internal.intro.impl.model;
11:
12: import org.eclipse.core.runtime.IConfigurationElement;
13: import org.osgi.framework.Bundle;
14: import org.w3c.dom.Element;
15:
16: /**
17: * An Intro Config component that has an id attribute and a style-id attribute.
18: * It also has the notion of filtering. Only model elements that have meaning in
19: * the UI, and that are targettable can be filtered. HEAD, for example, only
20: * applied to HTML presentation, and so, it does not need filtering. When model
21: * is first loaded, all elements are not filtered. When the UI is created, and
22: * we know which presentation we are using, the filter state is computed
23: * dynamically. Also, in the SWT presentation, when style manager picks
24: * elements, it may alter the filter state of a given element to prevent it from
25: * appearing twice in the ui. eg: title appearing as a title of the form, and as
26: * a title child text.
27: */
28: public abstract class AbstractBaseIntroElement extends
29: AbstractIntroIdElement {
30:
31: protected static final String ATT_STYLE_ID = "style-id"; //$NON-NLS-1$
32: protected static final String ATT_FILTERED_FROM = "filteredFrom"; //$NON-NLS-1$
33:
34: protected String style_id;
35: protected String filteredFrom;
36: private boolean isFiltered;
37:
38: AbstractBaseIntroElement(IConfigurationElement element) {
39: super (element);
40: style_id = element.getAttribute(ATT_STYLE_ID);
41: filteredFrom = element.getAttribute(ATT_FILTERED_FROM);
42: }
43:
44: AbstractBaseIntroElement(Element element, Bundle bundle) {
45: super (element, bundle);
46: style_id = getAttribute(element, ATT_STYLE_ID);
47: filteredFrom = getAttribute(element, ATT_FILTERED_FROM);
48: }
49:
50: /**
51: * Filter this element out based on the presentation kind.
52: *
53: */
54: private boolean checkFilterState() {
55: if (this .isOfType(AbstractIntroElement.MODEL_ROOT))
56: // root element is not filtered.
57: return false;
58: IntroModelRoot root = (IntroModelRoot) getParentPage()
59: .getParent();
60: return root.getPresentation().getImplementationKind().equals(
61: filteredFrom) ? true : false;
62: }
63:
64: /**
65: * @return Returns the class id.
66: */
67: public String getStyleId() {
68: return style_id;
69: }
70:
71: protected void loadFromParent() {
72: style_id = getAttribute(getElement(), ATT_STYLE_ID);
73: filteredFrom = getAttribute(getElement(), ATT_FILTERED_FROM);
74: }
75:
76: /**
77: * @return Returns the filter_kind.
78: */
79: public String getFilteredFrom() {
80: return filteredFrom;
81: }
82:
83: /**
84: * Return the filter state of this intro element. We need to do this when
85: * this element has been added to the model, and it has a parent. Also, this
86: * method will not be valid if the UI has not been loaded yet because it it
87: * the creation of the UI that determines the presentation details.
88: *
89: * @return Returns the isFiltered.
90: */
91: public boolean isFiltered() {
92: return checkFilterState() || isFiltered;
93: }
94:
95: public void setFilterState(boolean state) {
96: isFiltered = state;
97: }
98:
99: }
|