summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java39
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java31
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/CommentEditorContainer.java21
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/CommentEditorPanel.java41
4 files changed, 101 insertions, 31 deletions
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java
index 7b2e63e5de..96911198e2 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java
@@ -15,6 +15,7 @@
package com.google.gerrit.client.changes;
import com.google.gerrit.client.Gerrit;
+import com.google.gerrit.client.patches.CommentEditorContainer;
import com.google.gerrit.client.patches.CommentEditorPanel;
import com.google.gerrit.client.patches.PatchUtil;
import com.google.gerrit.client.rpc.GerritCallback;
@@ -55,7 +56,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-public class PublishCommentScreen extends AccountScreen implements ClickHandler {
+public class PublishCommentScreen extends AccountScreen implements
+ ClickHandler, CommentEditorContainer {
private static SavedState lastState;
private final PatchSet.Id patchSetId;
@@ -63,7 +65,7 @@ public class PublishCommentScreen extends AccountScreen implements ClickHandler
private ChangeDescriptionBlock descBlock;
private Panel approvalPanel;
private NpTextArea message;
- private Panel draftsPanel;
+ private FlowPanel draftsPanel;
private Button send;
private Button cancel;
private boolean saveStateOnUnload = true;
@@ -147,6 +149,39 @@ public class PublishCommentScreen extends AccountScreen implements ClickHandler
}
}
+ @Override
+ public void notifyDraftDelta(int delta) {
+ }
+
+ @Override
+ public void remove(CommentEditorPanel editor) {
+ commentEditors.remove(editor);
+
+ // The editor should be embedded into a panel holding all
+ // editors for the same file.
+ //
+ FlowPanel parent = (FlowPanel) editor.getParent();
+ parent.remove(editor);
+
+ // If the panel now holds no editors, remove it.
+ //
+ int editorCount = 0;
+ for (Widget w : parent) {
+ if (w instanceof CommentEditorPanel) {
+ editorCount++;
+ }
+ }
+ if (editorCount == 0) {
+ parent.removeFromParent();
+ }
+
+ // If that was the last file with a draft, remove the heading.
+ //
+ if (draftsPanel.getWidgetCount() == 1) {
+ draftsPanel.clear();
+ }
+ }
+
private void initMessage(final Panel body) {
body.add(new SmallHeading(Util.C.headingCoverMessage()));
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
index 6c6b513ad8..e91dbc5779 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
@@ -39,7 +39,7 @@ import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
@@ -50,7 +50,8 @@ import com.google.gwtexpui.globalkey.client.KeyCommandSet;
import java.util.ArrayList;
import java.util.List;
-public abstract class AbstractPatchContentTable extends NavigationTable<Object> {
+public abstract class AbstractPatchContentTable extends NavigationTable<Object>
+ implements CommentEditorContainer {
protected PatchTable fileList;
protected AccountInfoCache accountCache = AccountInfoCache.empty();
protected Patch.Key patchKey;
@@ -94,13 +95,35 @@ public abstract class AbstractPatchContentTable extends NavigationTable<Object>
table.setStyleName(Gerrit.RESOURCES.css().patchContentTable());
}
- void notifyDraftDelta(final int delta) {
+ public void notifyDraftDelta(final int delta) {
if (fileList != null) {
fileList.notifyDraftDelta(patchKey, delta);
}
}
@Override
+ public void remove(CommentEditorPanel panel) {
+ final int nRows = table.getRowCount();
+ for (int row = 0; row < nRows; row++) {
+ final int nCells = table.getCellCount(row);
+ for (int cell = 0; cell < nCells; cell++) {
+ if (table.getWidget(row, cell) == panel) {
+ destroyEditor(row, cell);
+ Widget p = table;
+ while (p != null) {
+ if (p instanceof Focusable) {
+ ((Focusable) p).setFocus(true);
+ break;
+ }
+ p = p.getParent();
+ }
+ return;
+ }
+ }
+ }
+ }
+
+ @Override
public void setRegisterKeys(final boolean on) {
super.setRegisterKeys(on);
if (on && keysComment != null && regComment == null) {
@@ -416,7 +439,7 @@ public abstract class AbstractPatchContentTable extends NavigationTable<Object>
accountCache = aic;
}
- static void destroyEditor(final FlexTable table, final int row, final int col) {
+ private void destroyEditor(final int row, final int col) {
table.clearCell(row, col);
final int span = table.getFlexCellFormatter().getRowSpan(row, col);
boolean removeRow = true;
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/CommentEditorContainer.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/CommentEditorContainer.java
new file mode 100644
index 0000000000..b1381ca443
--- /dev/null
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/CommentEditorContainer.java
@@ -0,0 +1,21 @@
+// Copyright (C) 2010 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.patches;
+
+public interface CommentEditorContainer {
+ void notifyDraftDelta(int delta);
+
+ void remove(CommentEditorPanel panel);
+}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/CommentEditorPanel.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/CommentEditorPanel.java
index da841a746e..2af1c71bcb 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/CommentEditorPanel.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/CommentEditorPanel.java
@@ -30,8 +30,6 @@ import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwtexpui.globalkey.client.NpTextArea;
import com.google.gwtjsonrpc.client.VoidResult;
@@ -276,12 +274,9 @@ public class CommentEditorPanel extends CommentPanel implements ClickHandler,
}
private void notifyDraftDelta(final int delta) {
- Widget p = getParent();
- if (p != null) {
- p = p.getParent();
- if (p != null) {
- ((AbstractPatchContentTable) p).notifyDraftDelta(delta);
- }
+ CommentEditorContainer c = getContainer();
+ if (c != null) {
+ c.notifyDraftDelta(delta);
}
}
@@ -316,24 +311,20 @@ public class CommentEditorPanel extends CommentPanel implements ClickHandler,
}
private void removeUI() {
- final FlexTable table = (FlexTable) getParent();
- final int nRows = table.getRowCount();
- for (int row = 0; row < nRows; row++) {
- final int nCells = table.getCellCount(row);
- for (int cell = 0; cell < nCells; cell++) {
- if (table.getWidget(row, cell) == this) {
- AbstractPatchContentTable.destroyEditor(table, row, cell);
- Widget p = table;
- while (p != null) {
- if (p instanceof Focusable) {
- ((Focusable) p).setFocus(true);
- break;
- }
- p = p.getParent();
- }
- return;
- }
+ CommentEditorContainer c = getContainer();
+ if (c != null) {
+ c.remove(this);
+ }
+ }
+
+ private CommentEditorContainer getContainer() {
+ Widget p = getParent();
+ while (p != null) {
+ if (p instanceof CommentEditorContainer) {
+ return (CommentEditorContainer) p;
}
+ p = p.getParent();
}
+ return null;
}
}