Move 'Publish/Rebase/Delete Edit' buttons into header

If a change has a change edit the natural next step is to
publish/rebase (or delete) it, hence these buttons should be displayed
in a more prominent place.

Change-Id: If02482ad8e5b564b4fbf1ce4a01fe7afd6e12ea2
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.java
index 9b7d9ba..1a7e852 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.java
@@ -19,7 +19,6 @@
 import com.google.gerrit.client.actions.ActionInfo;
 import com.google.gerrit.client.changes.ChangeInfo;
 import com.google.gerrit.client.changes.ChangeInfo.CommitInfo;
-import com.google.gerrit.client.changes.ChangeInfo.EditInfo;
 import com.google.gerrit.client.changes.ChangeInfo.RevisionInfo;
 import com.google.gerrit.client.rpc.NativeMap;
 import com.google.gerrit.reviewdb.client.Change;
@@ -48,9 +47,6 @@
   @UiField Button cherrypick;
   @UiField Button deleteChange;
   @UiField Button deleteRevision;
-  @UiField Button deleteEdit;
-  @UiField Button publishEdit;
-  @UiField Button rebaseEdit;
   @UiField Button publish;
   @UiField Button rebase;
   @UiField Button revert;
@@ -96,7 +92,6 @@
 
     initChangeActions(info, hasUser);
     initRevisionActions(info, revInfo, hasUser);
-    initEditActions(info, info.edit(), hasUser);
   }
 
   private void initChangeActions(ChangeInfo info, boolean hasUser) {
@@ -117,26 +112,6 @@
     }
   }
 
-  private void initEditActions(ChangeInfo info, EditInfo editInfo,
-      boolean hasUser) {
-    if (!info.has_edit() || !info.current_revision().equals(editInfo.name())) {
-      return;
-    }
-    NativeMap<ActionInfo> actions = editInfo.has_actions()
-        ? editInfo.actions()
-        : NativeMap.<ActionInfo> create();
-    actions.copyKeysIntoChildren("id");
-
-    if (hasUser) {
-      a2b(actions, "/", deleteEdit);
-      a2b(actions, "publish", publishEdit);
-      a2b(actions, "rebase", rebaseEdit);
-      for (String id : filterNonCore(actions)) {
-        add(new ActionButton(info, editInfo, actions.get(id)));
-      }
-    }
-  }
-
   private void initRevisionActions(ChangeInfo info, RevisionInfo revInfo,
       boolean hasUser) {
     NativeMap<ActionInfo> actions = revInfo.has_actions()
@@ -207,23 +182,6 @@
     DraftActions.publish(changeId, revision);
   }
 
-  @UiHandler("deleteEdit")
-  void onDeleteEdit(@SuppressWarnings("unused") ClickEvent e) {
-    if (Window.confirm(Resources.C.deleteChangeEdit())) {
-      EditActions.deleteEdit(changeId);
-    }
-  }
-
-  @UiHandler("publishEdit")
-  void onPublishEdit(@SuppressWarnings("unused") ClickEvent e) {
-    EditActions.publishEdit(changeId);
-  }
-
-  @UiHandler("rebaseEdit")
-  void onRebaseEdit(@SuppressWarnings("unused") ClickEvent e) {
-    EditActions.rebaseEdit(changeId);
-  }
-
   @UiHandler("deleteRevision")
   void onDeleteRevision(@SuppressWarnings("unused") ClickEvent e) {
     if (Window.confirm(Resources.C.deleteDraftRevision())) {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.ui.xml b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.ui.xml
index 3d9cd0f..c1e584d 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.ui.xml
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Actions.ui.xml
@@ -78,15 +78,6 @@
     <g:Button ui:field='publish' styleName='' visible='false'>
       <div><ui:msg>Publish</ui:msg></div>
     </g:Button>
-    <g:Button ui:field='deleteEdit' styleName='' visible='false'>
-      <div><ui:msg>Delete Edit</ui:msg></div>
-    </g:Button>
-    <g:Button ui:field='publishEdit' styleName='' visible='false'>
-      <div><ui:msg>Publish Edit</ui:msg></div>
-    </g:Button>
-    <g:Button ui:field='rebaseEdit' styleName='' visible='false'>
-      <div><ui:msg>Rebase Edit</ui:msg></div>
-    </g:Button>
 
     <g:Button ui:field='abandon' styleName='' visible='false'>
       <div><ui:msg>Abandon</ui:msg></div>
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
index d3b0762..ac642ea 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
@@ -77,6 +77,7 @@
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.EventListener;
+import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.Button;
@@ -179,6 +180,9 @@
   @UiField Element patchSetsText;
   @UiField Button download;
   @UiField Button reply;
+  @UiField Button publishEdit;
+  @UiField Button rebaseEdit;
+  @UiField Button deleteEdit;
   @UiField Button openAll;
   @UiField Button editMode;
   @UiField Button reviewMode;
@@ -457,6 +461,26 @@
         addFile.setVisible(false);
         reviewMode.setVisible(false);
       }
+
+      if (rev.is_edit()) {
+        NativeMap<ActionInfo> actions = info.edit().has_actions()
+            ? info.edit().actions()
+            : NativeMap.<ActionInfo> create();
+        actions.copyKeysIntoChildren("id");
+
+        if (actions.containsKey("publish")) {
+          publishEdit.setVisible(true);
+          publishEdit.setTitle(actions.get("publish").title());
+        }
+        if (actions.containsKey("rebase")) {
+          rebaseEdit.setVisible(true);
+          rebaseEdit.setTitle(actions.get("rebase").title());
+        }
+        if (actions.containsKey("/")) {
+          deleteEdit.setVisible(true);
+          deleteEdit.setTitle(actions.get("/").title());
+        }
+      }
     }
   }
 
@@ -492,6 +516,23 @@
     }
   }
 
+  @UiHandler("publishEdit")
+  void onPublishEdit(@SuppressWarnings("unused") ClickEvent e) {
+    EditActions.publishEdit(changeId);
+  }
+
+  @UiHandler("rebaseEdit")
+  void onRebaseEdit(@SuppressWarnings("unused") ClickEvent e) {
+    EditActions.rebaseEdit(changeId);
+  }
+
+  @UiHandler("deleteEdit")
+  void onDeleteEdit(@SuppressWarnings("unused") ClickEvent e) {
+    if (Window.confirm(Resources.C.deleteChangeEdit())) {
+      EditActions.deleteEdit(changeId);
+    }
+  }
+
   @Override
   public void registerKeys() {
     super.registerKeys();
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.ui.xml b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.ui.xml
index 8399f34..9c180cc 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.ui.xml
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.ui.xml
@@ -364,6 +364,15 @@
               title='Apply score with one click'>
             <ui:attribute name='title'/>
           </c:QuickApprove>
+          <g:Button ui:field='publishEdit' styleName='' visible='false'>
+            <div><ui:msg>Publish Edit</ui:msg></div>
+          </g:Button>
+          <g:Button ui:field='rebaseEdit' styleName='' visible='false'>
+            <div><ui:msg>Rebase Edit</ui:msg></div>
+          </g:Button>
+          <g:Button ui:field='deleteEdit' styleName='' visible='false'>
+            <div><ui:msg>Delete Edit</ui:msg></div>
+          </g:Button>
         </div>
       </div>