// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dataquality.record.linkage.ui.section;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import org.talend.dataquality.record.linkage.utils.MatchAnalysisConstant;
/**
* created by zshen on Aug 20, 2013 Detailled comment
*
*/
public abstract class AbstractSectionComposite implements PropertyChangeListener {
protected FormToolkit toolkit;
protected Section section = null;
private ScrolledForm form = null;
protected PropertyChangeSupport listeners = new PropertyChangeSupport(this);
public AbstractSectionComposite(final ScrolledForm form, Composite parent, int style, FormToolkit toolkit) {
this.toolkit = toolkit;
this.section = this.toolkit.createSection(parent, style);
this.form = form;
section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
section.addExpansionListener(new ExpansionAdapter() {
@Override
public void expansionStateChanged(ExpansionEvent e) {
form.reflow(true);
}
});
section.setExpanded(true);
}
/**
* Getter for section.
*
* @return the section
*/
public Section getSection() {
return this.section;
}
public void setClient(Control client) {
this.section.setClient(client);
}
/**
* Getter for form.
*
* @return the form
*/
public ScrolledForm getForm() {
return this.form;
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
listeners.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
listeners.removePropertyChangeListener(listener);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (MatchAnalysisConstant.ISDIRTY_PROPERTY.equals(evt.getPropertyName())) {
listeners.firePropertyChange(MatchAnalysisConstant.ISDIRTY_PROPERTY, true, false);
} else if (MatchAnalysisConstant.MATCH_RULE_TAB_SWITCH.equals(evt.getPropertyName())) {
listeners.firePropertyChange(MatchAnalysisConstant.MATCH_RULE_TAB_SWITCH, true, false);
}
}
/**
* change Section Display status when we switch different algorithm
*
*/
public void changeSectionDisStatus(boolean isVisible) {
GridData gd = (GridData) getSection().getLayoutData();
gd.exclude = !isVisible;
getSection().setExpanded(true);
getSection().setVisible(isVisible);
getSection().getParent().layout();
}
}