/*******************************************************************************
* Copyright (c) 2007, 2008 Symbian Software Limited 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:
* Bala Torati (Symbian) - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.ui.templateengine.uitree.uiwidgets;
import java.util.Map;
import java.util.Vector;
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.cdt.ui.templateengine.event.PatternEvent;
import org.eclipse.cdt.ui.templateengine.event.PatternEventListener;
import org.eclipse.cdt.ui.templateengine.uitree.UIElement;
/**
* By extending Composite we can create our own Container. UIComposite can act
* as the bridge between the UIPage and the UIWidgets contained in that page.
* The PatternEvents generated by the UIWidgets will be fired to the UIPage
* which is a PatternEventListener.
*/
public class UIComposite extends Composite {
/**
* The group UIElement corresponding to this UIPage.
*/
private UIElement uiElement;
/**
* The list of PatternEventListeners.
*/
private Vector<PatternEventListener> vector;
/**
* parent Composite, and The UIElement corresponding to this page.
*
* @param parent
* @param uiElement
*/
public UIComposite(Composite parent, UIElement uiElement, Map<String, String> valueStore) {
super(parent, SWT.NONE);
vector = new Vector<PatternEventListener>();
GridLayout layout = new GridLayout(2, false);
layout.marginWidth = 10;
layout.marginHeight = 5;
this.setLayout(layout);
this.setLayoutData(new GridData(GridData.FILL_BOTH));
this.uiElement = uiElement;
}
/**
* add a PatternListener to the list.
*
* @param patternListener
*/
public void addPatternListener(PatternEventListener patternListener) {
vector.add(patternListener);
}
/**
* remove the PatternListener from the list.
*
* @param patternListener
*/
public void removePatternListener(PatternEventListener patternListener) {
vector.remove(patternListener);
}
/**
* On occurrence of PatternEvent this method is called to invoke
* patternPerformed on all the registered listeners. In our application, we
* will have just one registered listener.
*/
public void firePatternEvent(PatternEvent patternEvent) {
for (int i = 0; i < vector.size(); i++) {
vector.get(i).patternPerformed(patternEvent);
}
}
/**
* This method will invoke the getValues on UIElement (group Element), which
* in turn will invoke the getValues on the UIElement (widgets). This
* returns an HashMap of Values.
*/
public Map<String, String> getPageData() {
return uiElement.getValues();
}
/**
* return the UIElement(group UI Element) represented by this UIComposite.
*
* @return UIElement.
*/
public UIElement getUIElement() {
return uiElement;
}
/**
* This information is used by UIPages to enable or disable the next button.
*/
public boolean isValid() {
return uiElement.isValid();
}
}