ref #6059 Save expand state for supplemental data view
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / AbstractCdmDataViewer.java
index 272d4711ee759e1213972d09d714050cee92dbbb..fb21157924846a41ededbe6d882ff929c162c564 100644 (file)
@@ -17,11 +17,15 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.forms.IFormPart;
 import org.eclipse.ui.forms.ManagedForm;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.events.IExpansionListener;
 import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
@@ -29,8 +33,6 @@ import eu.etaxonomy.taxeditor.ui.element.RootElement;
 import eu.etaxonomy.taxeditor.view.detail.CdmSectionPart;
 
 /**
- * <p>Abstract AbstractCdmDataViewer class.</p>
- *
  * @author n.hoffmann
  * @created Feb 9, 2010
  * @version 1.0
@@ -53,20 +55,11 @@ public abstract class AbstractCdmDataViewer extends Viewer implements IConversat
        private final AbstractCdmViewPart viewPart;
 
 
-       /**
-        * <p>Constructor for AbstractCdmDataViewer.</p>
-        *
-        * @param parent a {@link org.eclipse.swt.widgets.Composite} object.
-        * @param viewPart a {@link eu.etaxonomy.taxeditor.view.AbstractCdmViewPart} object.
-        */
        public AbstractCdmDataViewer(Composite parent, AbstractCdmViewPart viewPart) {
                this.viewPart = viewPart;
 
                managedForm = new ManagedForm(parent){
 
-                       /* (non-Javadoc)
-                        * @see org.eclipse.ui.forms.ManagedForm#dirtyStateChanged()
-                        */
                        @Override
                        public void dirtyStateChanged() {
                                markViewPartDirty();
@@ -84,9 +77,6 @@ public abstract class AbstractCdmDataViewer extends Viewer implements IConversat
                rootElement = new RootElement(formFactory, body);
        }
 
-       /**
-        * <p>createFormFactory</p>
-        */
        protected void createFormFactory() {
                if(formFactory != null){
                        formFactory.dispose();
@@ -99,17 +89,10 @@ public abstract class AbstractCdmDataViewer extends Viewer implements IConversat
                viewPart.changed(input);
        }
 
-
-       /**
-        * @return
-        */
        protected AbstractCdmViewPart getViewPart() {
                return viewPart;
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.jface.viewers.Viewer#getControl()
-        */
        /** {@inheritDoc} */
        @Override
        public Control getControl() {
@@ -123,9 +106,6 @@ public abstract class AbstractCdmDataViewer extends Viewer implements IConversat
                return body;
        }
        
-       /* (non-Javadoc)
-        * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
-        */
        /** {@inheritDoc} */
        @Override
        public void setInput(Object input) {
@@ -135,18 +115,12 @@ public abstract class AbstractCdmDataViewer extends Viewer implements IConversat
                refresh();
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.jface.viewers.Viewer#getInput()
-        */
        /** {@inheritDoc} */
        @Override
        public Object getInput() {
                return input;
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.jface.viewers.Viewer#refresh()
-        */
        /** {@inheritDoc} */
        @Override
        public void refresh() {
@@ -159,26 +133,15 @@ public abstract class AbstractCdmDataViewer extends Viewer implements IConversat
                managedForm.reflow(true);
        }
 
-
-       /**
-        * <p>layout</p>
-        */
        public void layout(){
                body.layout();
        }
 
-       /**
-        * <p>showParts</p>
-        */
        protected abstract void showParts();
 
-
-       /**
-        * <p>destroySections</p>
-        */
        protected void destroySections() {
                for (IFormPart formPart : managedForm.getParts()){
-                       removePart((CdmSectionPart) formPart);
+                       removePart((CdmSectionPart<?>) formPart);
                }
 
                managedForm.setInput(null);
@@ -195,10 +158,6 @@ public abstract class AbstractCdmDataViewer extends Viewer implements IConversat
                }
        }
 
-
-       /**
-        * <p>setFocus</p>
-        */
        public void setFocus(){
                // we have to set focus to a control of this viewer
                // otherwise, after opening a dialog from the details, the focus will not be
@@ -209,39 +168,24 @@ public abstract class AbstractCdmDataViewer extends Viewer implements IConversat
                }
        }
 
-       /**
-        * <p>reflow</p>
-        */
        public void reflow(){
                managedForm.reflow(true);
        }
 
-       /**
-        * <p>removePart</p>
-        *
-        * @param sectionPart a {@link eu.etaxonomy.taxeditor.view.detail.CdmSectionPart} object.
-        */
-       protected void removePart(CdmSectionPart sectionPart){
+       protected void removePart(CdmSectionPart<?> sectionPart){
                managedForm.removePart(sectionPart);
                formFactory.removePropertyChangeListener(sectionPart);
        }
 
-       /**
-        * <p>addPart</p>
-        *
-        * @param section a {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection} object.
-        */
-       protected void addPart(AbstractFormSection section){
-               CdmSectionPart sectionPart = new CdmSectionPart(section);
+       protected void addPart(AbstractFormSection<?> section, boolean isDefaultExpanded){
+               CdmSectionPart<?> sectionPart = new CdmSectionPart<>(section);
                managedForm.addPart(sectionPart);
                formFactory.addPropertyChangeListener(sectionPart);
+               PreferencesUtil.getPreferenceStore().setDefault(section.getClass().getCanonicalName()+";"+getInput().getClass().getCanonicalName(), isDefaultExpanded);
+               section.setExpanded(PreferencesUtil.getPreferenceStore().getBoolean(section.getClass().getCanonicalName()+";"+getInput().getClass().getCanonicalName()));
+               section.addExpansionListener(new ExpandListener(section));
        }
 
-       /**
-        * <p>getConversationHolder</p>
-        *
-        * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
-        */
        @Override
     public ConversationHolder getConversationHolder() {
                return viewPart.getConversationHolder();
@@ -250,5 +194,25 @@ public abstract class AbstractCdmDataViewer extends Viewer implements IConversat
        /** {@inheritDoc} */
        @Override
     public void update(CdmDataChangeMap changeEvents) {}
+       
+    private class ExpandListener implements IExpansionListener{
+       
+       private Section section;
+       
+               public ExpandListener(Section section) {
+                       super();
+                       this.section = section;
+               }
+
+               @Override
+               public void expansionStateChanging(ExpansionEvent e) {
+               }
+
+               @Override
+               public void expansionStateChanged(ExpansionEvent e) {
+                       PreferencesUtil.getPreferenceStore().setValue(section.getClass().getCanonicalName()+";"+getInput().getClass().getCanonicalName(), e.getState());
+               }
+       
+    }
 
 }