ref #7063: fix gray and checked marks in area tree
authorKatja Luther <k.luther@bgbm.org>
Thu, 9 Nov 2017 09:45:23 +0000 (10:45 +0100)
committerKatja Luther <k.luther@bgbm.org>
Fri, 10 Nov 2017 13:40:36 +0000 (14:40 +0100)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/wizard/AvailableDistributionPage.java

index af11df2376a9ccf868595b2d14e70c8ef8d593a4..cc25cb48152d8bf848c20c71d2f5031956e47784 100755 (executable)
@@ -21,7 +21,6 @@ import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTreeViewer;
 import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.ITreeSelection;
 import org.eclipse.jface.viewers.StyledString.Styler;
 import org.eclipse.jface.viewers.TreePath;
 import org.eclipse.jface.wizard.WizardPage;
@@ -108,9 +107,10 @@ public class AvailableDistributionPage extends WizardPage implements ICdmEntityS
                 ignoreCheckEvent = true;
 
                 try {
-                    TreePath path  = ((ITreeSelection) viewer.getSelection()).getPaths()[0];
+
                     checkChildren(event.getElement(), event.getChecked());
-                    checkParents(path.getParentPath());
+
+                    grayParents(event.getElement());
                 }
                 finally {
                     ignoreCheckEvent = false;
@@ -131,6 +131,7 @@ public class AvailableDistributionPage extends WizardPage implements ICdmEntityS
         }
         List<TermVocabulary<DefinedTermBase>> vocs = CdmStore.getService(IVocabularyService.class).findByTermType(
                 TermType.NamedArea, null);
+
         return vocs;
     }
 
@@ -274,6 +275,40 @@ public class AvailableDistributionPage extends WizardPage implements ICdmEntityS
            }
        }
    }
+   /**
+   *
+   * @param path
+   * @param checked
+   */
+  private void grayParents(final Object element) {
+      TermContentProvider tcp = new TermContentProvider();
+
+      if (element == null) {
+          return;
+      }
+   //   final Object element = path.getLastSegment();
+      Object parent = tcp.getParent(element);
+      if (parent != null) {
+          boolean allChecked = true;
+          boolean allUnchecked = true;
+          for (final Object fieldElement : tcp.getChildren(parent)) {
+              allChecked = allChecked && this.viewer.getChecked(fieldElement);
+              allUnchecked = allUnchecked && !this.viewer.getChecked(fieldElement);
+          }
+          if (allUnchecked) {
+              this.viewer.setChecked(parent, false);
+              this.viewer.setGrayed(parent, false);
+          } else if (allChecked) {
+              this.viewer.setChecked(parent, true);
+              this.viewer.setGrayed(parent, false);
+          } else if (!allUnchecked && !allChecked) {
+              this.viewer.setChecked(parent, true);
+              this.viewer.setGrayed(parent, true);
+          }
+
+        grayParents(tcp.getParent(parent));
+      }
+  }
 
     @Override
     public void dispose() {