From 150f46468edb3829e1988f1da4a66c55c073e416 Mon Sep 17 00:00:00 2001 From: David Mason Date: Thu, 11 Jul 2013 17:21:59 +1000 Subject: [PATCH 1/3] rhbz983370 show indeterminate state for parent filter checkboxes when some children checked --- .../webtrans/client/view/TransFilterView.java | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java index 217f8bba00..1b1e8381a4 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java @@ -32,6 +32,7 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HasValue; @@ -197,23 +198,32 @@ public void onSearchFieldCancel() @UiHandler({"translatedChk", "fuzzyChk", "untranslatedChk", "approvedChk", "rejectedChk", "hasErrorChk"}) public void onFilterOptionsChanged(ValueChangeEvent event) { - updateStateCheckboxGroups(); + updateParentCheckboxes(); listener.messageFilterOptionChanged(translatedChk.getValue(), fuzzyChk.getValue(), untranslatedChk.getValue(), approvedChk.getValue(), rejectedChk.getValue(), hasErrorChk.getValue()); } - private void updateStateCheckboxGroups() + private void updateParentCheckboxes() { - // TODO show intermediate state if some but not all are checked - incompleteChk.setValue(allChecked(untranslatedChk, fuzzyChk, rejectedChk)); - completeChk.setValue(allChecked(translatedChk, approvedChk)); + updateParentCheckboxToMatchChildren(incompleteChk, untranslatedChk, fuzzyChk, rejectedChk); + updateParentCheckboxToMatchChildren(completeChk, translatedChk, approvedChk); } - private static boolean allChecked(CheckBox... toggles) + private void updateParentCheckboxToMatchChildren(CheckBox parent, CheckBox... children) { - for (HasValue toggle : toggles) + boolean allChecked = allHaveValue(true, children); + boolean noneChecked = allHaveValue(false, children); + boolean partiallyChecked = !(allChecked || noneChecked); + + parent.setValue(allChecked); + setPartiallyChecked(parent, partiallyChecked); + } + + private static boolean allHaveValue(boolean checkValue, CheckBox... checkboxes) + { + for (CheckBox checkbox : checkboxes) { - if (!toggle.getValue()) + if (checkbox.getValue() != checkValue) { return false; } @@ -221,6 +231,15 @@ private static boolean allChecked(CheckBox... toggles) return true; } + private static void setPartiallyChecked(CheckBox checkbox, boolean partiallyChecked) + { + setElementIndeterminate(checkbox.getElement(), partiallyChecked); + } + + private static native void setElementIndeterminate(Element elem, boolean indeterminate)/*-{ + elem.getElementsByTagName('input')[0].indeterminate = indeterminate; + }-*/; + @UiHandler("incompleteChk") public void onIncompleteChkChanged(ValueChangeEvent event) { From 87dfb6d16ba3189045a5490f5000c8c99ee8a9f6 Mon Sep 17 00:00:00 2001 From: David Mason Date: Thu, 11 Jul 2013 17:22:26 +1000 Subject: [PATCH 2/3] rhbz983370 rename parent checkboxes for clarity --- .../webtrans/client/view/TransFilterView.java | 16 +++++++--------- .../webtrans/client/view/TransFilterView.ui.xml | 4 ++-- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java index 1b1e8381a4..d2a1c8b7f2 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java @@ -35,7 +35,6 @@ import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HasValue; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; @@ -52,10 +51,9 @@ public class TransFilterView extends Composite implements TransFilterDisplay Styles style; @UiField - CheckBox translatedChk, fuzzyChk, untranslatedChk, approvedChk, rejectedChk, hasErrorChk; - - @UiField - CheckBox incompleteChk, completeChk; + CheckBox parentIncompleteChk, untranslatedChk, fuzzyChk, rejectedChk, + parentCompleteChk, translatedChk, approvedChk, + hasErrorChk; private String hintMessage; @@ -205,8 +203,8 @@ public void onFilterOptionsChanged(ValueChangeEvent event) private void updateParentCheckboxes() { - updateParentCheckboxToMatchChildren(incompleteChk, untranslatedChk, fuzzyChk, rejectedChk); - updateParentCheckboxToMatchChildren(completeChk, translatedChk, approvedChk); + updateParentCheckboxToMatchChildren(parentIncompleteChk, untranslatedChk, fuzzyChk, rejectedChk); + updateParentCheckboxToMatchChildren(parentCompleteChk, translatedChk, approvedChk); } private void updateParentCheckboxToMatchChildren(CheckBox parent, CheckBox... children) @@ -240,7 +238,7 @@ private static native void setElementIndeterminate(Element elem, boolean indeter elem.getElementsByTagName('input')[0].indeterminate = indeterminate; }-*/; - @UiHandler("incompleteChk") + @UiHandler("parentIncompleteChk") public void onIncompleteChkChanged(ValueChangeEvent event) { untranslatedChk.setValue(event.getValue()); @@ -249,7 +247,7 @@ public void onIncompleteChkChanged(ValueChangeEvent event) onFilterOptionsChanged(event); } - @UiHandler("completeChk") + @UiHandler("parentCompleteChk") public void onCompleteChkChanged(ValueChangeEvent event) { translatedChk.setValue(event.getValue()); diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.ui.xml b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.ui.xml index 68234e244e..de9d674c98 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.ui.xml +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.ui.xml @@ -145,7 +145,7 @@
  • - Incomplete + Incomplete
    • @@ -161,7 +161,7 @@
    • - Complete + Complete
      • From 9b9cfeaf9495a86da341c901380ebf589505c6c3 Mon Sep 17 00:00:00 2001 From: David Mason Date: Thu, 11 Jul 2013 17:24:31 +1000 Subject: [PATCH 3/3] use standard state order for items repeated for each state --- .../webtrans/client/view/TransFilterView.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java index d2a1c8b7f2..36e6e9686b 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/view/TransFilterView.java @@ -114,9 +114,9 @@ public void setSearchTerm(String searchTerm) } @Override - public void setTranslatedFilter(boolean filterByTranslated) + public void setUntranslatedFilter(boolean filterByUntranslated) { - translatedChk.setValue(filterByTranslated); + untranslatedChk.setValue(filterByUntranslated); } @Override @@ -126,17 +126,17 @@ public void setNeedReviewFilter(boolean filterByNeedReview) } @Override - public void setUntranslatedFilter(boolean filterByUntranslated) + public void setTranslatedFilter(boolean filterByTranslated) { - untranslatedChk.setValue(filterByUntranslated); + translatedChk.setValue(filterByTranslated); } - + @Override public void setApprovedFilter(boolean filterByApproved) { approvedChk.setValue(filterByApproved); } - + @Override public void setRejectedFilter(boolean filterByRejected) { @@ -258,9 +258,9 @@ public void onCompleteChkChanged(ValueChangeEvent event) @Override public void setOptionsState(ConfigurationState state) { - translatedChk.setValue(state.isFilterByTranslated()); - fuzzyChk.setValue(state.isFilterByNeedReview()); untranslatedChk.setValue(state.isFilterByUntranslated()); + fuzzyChk.setValue(state.isFilterByNeedReview()); + translatedChk.setValue(state.isFilterByTranslated()); approvedChk.setValue(state.isFilterByApproved()); rejectedChk.setValue(state.isFilterByRejected()); hasErrorChk.setValue(state.isFilterByHasError());