From fa29f879aec4af5e7eb22be369b0f63b6551aa2c Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Fri, 15 Jan 2010 16:16:23 -0800 Subject: [PATCH] Only enable Delete on identities tab when we have selections Don't turn on the Delete button unless at least one identity was picked from the table using its checkbox. If there are no identities available for deletion, don't show the Delete button at all. Change-Id: I1f57ee71a31a8b21d12f8f231fe55b74107baaec Signed-off-by: Shawn O. Pearce --- .../client/account/ExternalIdPanel.java | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/ExternalIdPanel.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/ExternalIdPanel.java index 5491559c53..c647e70dbd 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/ExternalIdPanel.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/ExternalIdPanel.java @@ -24,6 +24,8 @@ import com.google.gerrit.common.auth.openid.OpenIdUrls; import com.google.gerrit.reviewdb.AccountExternalId; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.logical.shared.ValueChangeEvent; +import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.user.client.History; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; @@ -48,6 +50,7 @@ class ExternalIdPanel extends Composite { body.add(identites); deleteIdentity = new Button(Util.C.buttonDeleteIdentity()); + deleteIdentity.setEnabled(false); deleteIdentity.addClickHandler(new ClickHandler() { @Override public void onClick(final ClickEvent event) { @@ -90,6 +93,8 @@ class ExternalIdPanel extends Composite { } private class IdTable extends FancyFlexTable { + private ValueChangeHandler updateDeleteHandler; + IdTable() { table.setWidth(""); table.setText(0, 2, Util.C.webIdStatus()); @@ -101,6 +106,13 @@ class ExternalIdPanel extends Composite { fmt.addStyleName(0, 2, Gerrit.RESOURCES.css().dataHeader()); fmt.addStyleName(0, 3, Gerrit.RESOURCES.css().dataHeader()); fmt.addStyleName(0, 4, Gerrit.RESOURCES.css().dataHeader()); + + updateDeleteHandler = new ValueChangeHandler() { + @Override + public void onValueChange(ValueChangeEvent event) { + updateDeleteButton(); + } + }; } void deleteChecked() { @@ -119,12 +131,13 @@ class ExternalIdPanel extends Composite { keys.add(k.getKey()); } } - if (!keys.isEmpty()) { + if (keys.isEmpty()) { + updateDeleteButton(); + } else { deleteIdentity.setEnabled(false); Util.ACCOUNT_SEC.deleteExternalIds(keys, new GerritCallback>() { public void onSuccess(final Set removed) { - deleteIdentity.setEnabled(true); for (int row = 1; row < table.getRowCount();) { final AccountExternalId k = getRowItem(row); if (k != null && removed.contains(k.getKey())) { @@ -133,17 +146,36 @@ class ExternalIdPanel extends Composite { row++; } } + updateDeleteButton(); } @Override public void onFailure(Throwable caught) { - deleteIdentity.setEnabled(true); + updateDeleteButton(); super.onFailure(caught); } }); } } + void updateDeleteButton() { + int off = 0; + boolean on = false; + for (int row = 1; row < table.getRowCount(); row++) { + if (table.getWidget(row, 1) == null) { + off++; + } else { + CheckBox sel = (CheckBox) table.getWidget(row, 1); + if (sel.getValue()) { + on = true; + break; + } + } + } + deleteIdentity.setVisible(off < table.getRowCount() - 1); + deleteIdentity.setEnabled(on); + } + void display(final List result) { Collections.sort(result, new Comparator() { @Override @@ -162,6 +194,7 @@ class ExternalIdPanel extends Composite { for (final AccountExternalId k : result) { addOneId(k); } + updateDeleteButton(); } void addOneId(final AccountExternalId k) { @@ -176,7 +209,9 @@ class ExternalIdPanel extends Composite { applyDataRowStyle(row); if (k.canDelete()) { - table.setWidget(row, 1, new CheckBox()); + final CheckBox sel = new CheckBox(); + sel.addValueChangeHandler(updateDeleteHandler); + table.setWidget(row, 1, sel); } else { table.setText(row, 1, ""); }