import java.util.ConcurrentModificationException;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.TypedListener;
import org.eclipse.swt.widgets.Widget;
-import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.events.IExpansionListener;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
import org.eclipse.ui.forms.widgets.ToggleHyperlink;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
/**
* <p>
*
* @author n.hoffmann
* @created Feb 22, 2010
- * @version 1.0
* @param <T>
*/
//TODO shouldn't ENTITY be bound with super class ICdmBase for example (AbstractFormSection<ENTITY extends ICdmBase>)?
private ENTITY entity;
- private final Set<ICdmFormElement> elements = new HashSet<ICdmFormElement>();
+ private final Set<ICdmFormElement> elements = new HashSet<>();
protected CdmFormFactory formFactory;
TableWrapLayout layout = LayoutConstants.LAYOUT();
layout.bottomMargin = 10;
layout.rightMargin = 5;
+ layout.horizontalSpacing = 5;
client.setLayout(layout);
*/
public void setEntity(ENTITY entity) {
this.entity = entity;
+ addExpandListener();
}
- /*
- * (non-Javadoc)
- *
- * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()
- */
/**
* <p>
* Getter for the field <code>entity</code>.
*/
@Override
public void removeElements() {
- for (ICdmFormElement childElement : getElements()) {
+ for (Iterator<ICdmFormElement> formElementIterator = getElements().iterator();formElementIterator.hasNext();) {
+ ICdmFormElement childElement = formElementIterator.next();
// recursion
childElement.removeElements();
formFactory.removePropertyChangeListener(childElement);
// dispose of the controls
- for (Control control : childElement.getControls()) {
+ for (Iterator<Control> controlIterator = childElement.getControls().iterator();controlIterator.hasNext();) {
+ Control control = controlIterator.next();
// we added the layoutComposite of the parental element as the
// layout composite to this formElement
// but we do not want to destroy it.
*/
@Override
public Set<Control> getControls() {
- Set<Control> controls = new HashSet<Control>();
+ Set<Control> controls = new HashSet<>();
for (Control control : getChildren()) {
controls.add(control);
*
* @see eu.etaxonomy.taxeditor.forms.ICdmFormElement#refresh()
*/
- /**
- * <p>
- * refresh
- * </p>
- */
@Override
public void refresh() {
// empty default implementation
*/
@Override
public ConversationHolder getConversationHolder() {
- if(getParentElement() instanceof RootElement || getParentElement() == null){
-
- IEditorPart activeEditor = AbstractUtility.getActiveEditor();
- if(activeEditor instanceof IConversationEnabled){
- ConversationHolder conversation = ((IConversationEnabled) AbstractUtility.getActiveEditor()).getConversationHolder();
- return conversation;
- }
- }else if(getParentElement() instanceof IConversationEnabled){
- return ((IConversationEnabled) getParentElement()).getConversationHolder();
- }
- MessagingUtils.messageDialog("Could not get conversation for AbstractFormSection",
- getClass(), "There is an error in the implementation. There should have been an active editor but it wasn't",
+ if(AbstractUtility.getActivePart() instanceof IConversationEnabled){
+ return ((IConversationEnabled) AbstractUtility.getActivePart()).getConversationHolder();
+ }
+ if(getParentElement() instanceof RootElement || getParentElement() == null){
+
+ Object activeEditor = AbstractUtility.getActiveEditor();
+ if(activeEditor instanceof IConversationEnabled){
+ ConversationHolder conversation = ((IConversationEnabled) AbstractUtility.getActiveEditor()).getConversationHolder();
+ return conversation;
+ }
+ }else if(getParentElement() instanceof IConversationEnabled){
+ return ((IConversationEnabled) getParentElement()).getConversationHolder();
+ }
+ MessagingUtils.error(getClass(), "Could not get conversation for AbstractFormSection. There is an error in the implementation. There should have been an active editor but it wasn't",
new IllegalArgumentException());
return null;
}
/** {@inheritDoc} */
-
@Override
public void update(CdmDataChangeMap changeEvents) {
}
+ public class ExpandListener implements IExpansionListener{
+ @Override
+ public void expansionStateChanging(ExpansionEvent e) {
+ }
+ @Override
+ public void expansionStateChanged(ExpansionEvent e) {
+ PreferencesUtil.getPreferenceStore().setValue(getPrefKey(), e.getState());
+ }
+ }
+
+ /**
+ * Adds a custom implementation of IExpansionListener to this section
+ * which stores the expansion state in the preferences
+ */
+ protected void addExpandListener() {
+ PreferencesUtil.getPreferenceStore().setDefault(getPrefKey(), isExpanded());
+ setExpanded(PreferencesUtil.getPreferenceStore().getBoolean(getPrefKey()));
+ addExpansionListener(new ExpandListener());
+ }
+
+ private String getPrefKey() {
+ return this.getClass().getCanonicalName()+";"+entity.getClass().getCanonicalName();
+ }
+
}