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.api.conversation.IConversationEnabled;
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>
//TODO shouldn't ENTITY be bound with super class ICdmBase for example (AbstractFormSection<ENTITY extends ICdmBase>)?
public abstract class AbstractFormSection<ENTITY> extends Section implements ISelectionChangedListener, IEntityElement<ENTITY>, IConversationEnabled {
+ /**
+ * The default number of columns in detail sections
+ */
+ public static final int DEFAULT_NUM_COLUMNS = 2;
+
private ISelectionProvider selectionProvider;
private ENTITY entity;
TableWrapLayout layout = LayoutConstants.LAYOUT();
layout.bottomMargin = 10;
layout.rightMargin = 5;
+ layout.horizontalSpacing = 5;
client.setLayout(layout);
this.setClient(client);
+
}
/**
*/
public void setEntity(ENTITY entity) {
this.entity = entity;
+ addExpandListener();
}
/*
((IPropertyChangeListener) listener).propertyChange(event);
}
} catch (ConcurrentModificationException e) {
- AbstractUtility.warn(getClass(), "ConcurrentModificationException while handling PropertyChangeEvents."
+ MessagingUtils.warn(getClass(), "ConcurrentModificationException while handling PropertyChangeEvents."
+ " It seems like this is not critical");
}
}
*
* @return a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
*/
- public CdmFormFactory getFormFactory() {
+ @Override
+ public CdmFormFactory getFormFactory() {
return formFactory;
}
*/
@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();
- }
- AbstractUtility.errorDialog("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.getActiveE4Part() instanceof IConversationEnabled){
+ return ((IConversationEnabled) AbstractUtility.getActiveE4Part()).getConversationHolder();
+ }
+ if(getParentElement() instanceof RootElement || getParentElement() == null){
+
+ Object activeEditor = AbstractUtility.getActiveE4Editor();
+ if(activeEditor instanceof IConversationEnabled){
+ ConversationHolder conversation = ((IConversationEnabled) AbstractUtility.getActiveE4Editor()).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();
}