Auto completion for "Cherry Pick..."-button.

Change-Id: I8b6ad2ea9c833ff267401426367fcc8d17fc437f
This commit is contained in:
Gustaf Lundh
2012-11-16 19:18:23 -08:00
parent a26e221810
commit 76b03b680b
3 changed files with 139 additions and 46 deletions

View File

@@ -13,7 +13,6 @@
// limitations under the License.
package com.google.gerrit.client.changes;
import com.google.gerrit.client.Dispatcher;
import com.google.gerrit.client.FormatUtil;
import com.google.gerrit.client.Gerrit;
@@ -22,10 +21,10 @@ import com.google.gerrit.client.download.DownloadPanel;
import com.google.gerrit.client.patches.PatchUtil;
import com.google.gerrit.client.rpc.GerritCallback;
import com.google.gerrit.client.ui.AccountLinkPanel;
import com.google.gerrit.client.ui.CommentedActionDialog;
import com.google.gerrit.client.ui.ActionDialog;
import com.google.gerrit.client.ui.CherryPickDialog;
import com.google.gerrit.client.ui.ComplexDisclosurePanel;
import com.google.gerrit.client.ui.ListenableAccountDiffPreference;
import com.google.gerrit.client.ui.SmallHeading;
import com.google.gerrit.common.PageLinks;
import com.google.gerrit.common.data.ChangeDetail;
import com.google.gerrit.common.data.PatchSetDetail;
@@ -44,12 +43,10 @@ import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DisclosurePanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
import com.google.gwt.user.client.ui.InlineLabel;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwtjsonrpc.common.VoidResult;
import java.util.HashSet;
@@ -387,7 +384,7 @@ class PatchSetComplexDisclosurePanel extends ComplexDisclosurePanel
@Override
public void onClick(final ClickEvent event) {
b.setEnabled(false);
new CherryPickDialog(b) {
new CherryPickDialog(b, changeDetail.getChange().getProject()) {
{
sendButton.setText(Util.C.buttonCherryPickChangeSend());
message.setText(Util.M.cherryPickedChangeDefaultMessage(
@@ -673,44 +670,4 @@ class PatchSetComplexDisclosurePanel extends ComplexDisclosurePanel
patchTable.setActive(active);
}
}
private abstract class ActionDialog extends CommentedActionDialog<ChangeDetail> {
public ActionDialog(final FocusWidget enableOnFailure, final boolean redirect,
String dialogTitle, String dialogHeading) {
super(dialogTitle, dialogHeading, new ChangeDetailCache.IgnoreErrorCallback() {
@Override
public void onSuccess(ChangeDetail result) {
if (redirect) {
Gerrit.display(PageLinks.toChange(result.getChange().getId()));
} else {
super.onSuccess(result);
}
}
@Override
public void onFailure(Throwable caught) {
enableOnFailure.setEnabled(true);
}
});
}
}
private abstract class CherryPickDialog extends ActionDialog {
private TextBox newBranch;
CherryPickDialog(final FocusWidget enableOnFailure) {
super(enableOnFailure, true, Util.C.cherryPickTitle(), Util.C.cherryPickCommitMessage());
newBranch = new TextBox();
newBranch.setVisibleLength(65);
setFocusOn(newBranch);
message.setCharacterWidth(70);
panel.insert(newBranch, 0);
panel.insert(new SmallHeading(Util.C.headingCherryPickBranch()), 0);
}
public String getDestinationBranch() {
return newBranch.getText();
}
}
}

View File

@@ -0,0 +1,42 @@
// Copyright (C) 2013 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.ui;
import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.changes.ChangeDetailCache;
import com.google.gerrit.common.PageLinks;
import com.google.gerrit.common.data.ChangeDetail;
import com.google.gwt.user.client.ui.FocusWidget;
public abstract class ActionDialog extends CommentedActionDialog<ChangeDetail> {
public ActionDialog(final FocusWidget enableOnFailure, final boolean redirect,
String dialogTitle, String dialogHeading) {
super(dialogTitle, dialogHeading, new ChangeDetailCache.IgnoreErrorCallback() {
@Override
public void onSuccess(ChangeDetail result) {
if (redirect) {
Gerrit.display(PageLinks.toChange(result.getChange().getId()));
} else {
super.onSuccess(result);
}
}
@Override
public void onFailure(Throwable caught) {
enableOnFailure.setEnabled(true);
}
});
}
}

View File

@@ -0,0 +1,94 @@
// Copyright (C) 2013 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.client.ui;
import com.google.gerrit.client.changes.Util;
import com.google.gerrit.client.rpc.GerritCallback;
import com.google.gerrit.common.data.ListBranchesResult;
import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
import com.google.gwtexpui.globalkey.client.GlobalKey;
import com.google.gwtexpui.safehtml.client.HighlightSuggestOracle;
import java.util.LinkedList;
import java.util.List;
public abstract class CherryPickDialog extends ActionDialog {
private SuggestBox newBranch;
private List<Branch> branches;
public CherryPickDialog(final FocusWidget enableOnFailure, Project.NameKey project) {
super(enableOnFailure, true, Util.C.cherryPickTitle(), Util.C
.cherryPickCommitMessage());
com.google.gerrit.client.account.Util.PROJECT_SVC.listBranches(project,
new GerritCallback<ListBranchesResult>() {
@Override
public void onSuccess(ListBranchesResult result) {
branches = result.getBranches();
}
});
newBranch = new SuggestBox(new HighlightSuggestOracle() {
@Override
protected void onRequestSuggestions(Request request, Callback done) {
LinkedList<BranchSuggestion> suggestions =
new LinkedList<BranchSuggestion>();
for (final Branch b : branches) {
if (b.getName().indexOf(request.getQuery()) >= 0) {
suggestions.add(new BranchSuggestion(b));
}
}
done.onSuggestionsReady(request, new Response(suggestions));
}
});
newBranch.setWidth("70ex");
message.setCharacterWidth(70);
panel.insert(newBranch, 0);
panel.insert(new SmallHeading(Util.C.headingCherryPickBranch()), 0);
}
@Override
public void center() {
super.center();
GlobalKey.dialog(this);
newBranch.setFocus(true);
}
public String getDestinationBranch() {
return newBranch.getText();
}
class BranchSuggestion implements Suggestion {
private Branch branch;
public BranchSuggestion(Branch branch) {
this.branch = branch;
}
@Override
public String getDisplayString() {
return branch.getName();
}
@Override
public String getReplacementString() {
return branch.getShortName();
}
}
}