Merge "Refactor row ClickHandling into NavigationTable"

This commit is contained in:
Edwin Kempin
2012-11-13 15:03:09 -08:00
committed by Gerrit Code Review
5 changed files with 53 additions and 88 deletions

View File

@@ -45,7 +45,6 @@ import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
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.Focusable;
@@ -212,11 +211,6 @@ public abstract class AbstractPatchContentTable extends NavigationTable<Object>
public abstract void display(CommentDetail comments, boolean expandComments);
@Override
protected MyFlexTable createFlexTable() {
return new DoubleClickFlexTable();
}
@Override
protected Object getRowItemKey(final Object item) {
return null;
@@ -366,12 +360,6 @@ public abstract class AbstractPatchContentTable extends NavigationTable<Object>
return getRowItem(row) instanceof CommentList;
}
/** Invoked when the user double clicks on a table cell. */
protected abstract void onCellDoubleClick(int row, int column);
/** Invoked when the user clicks on a table cell. */
protected abstract void onCellSingleClick(int row, int column);
/**
* Invokes createCommentEditor() with an empty string as value for the comment
* parent UUID. This method is invoked by callers that want to create an
@@ -658,42 +646,6 @@ public abstract class AbstractPatchContentTable extends NavigationTable<Object>
new ArrayList<PublishedCommentPanel>();
}
protected class DoubleClickFlexTable extends MyFlexTable {
public DoubleClickFlexTable() {
sinkEvents(Event.ONDBLCLICK | Event.ONCLICK);
}
@Override
public void onBrowserEvent(final Event event) {
switch (DOM.eventGetType(event)) {
case Event.ONCLICK: {
// Find out which cell was actually clicked.
final Element td = getEventTargetCell(event);
if (td == null) {
break;
}
final int row = rowOf(td);
if (getRowItem(row) != null) {
movePointerTo(row);
onCellSingleClick(rowOf(td), columnOf(td));
return;
}
break;
}
case Event.ONDBLCLICK: {
// Find out which cell was actually clicked.
Element td = getEventTargetCell(event);
if (td == null) {
return;
}
onCellDoubleClick(rowOf(td), columnOf(td));
return;
}
}
super.onBrowserEvent(event);
}
}
public static class NoOpKeyCommand extends NeedsSignInKeyCommand {
public NoOpKeyCommand(int mask, int key, String help) {
super(mask, key, help);

View File

@@ -63,6 +63,7 @@ public class SideBySideTable extends AbstractPatchContentTable {
@Override
protected void onCellSingleClick(int row, int column) {
super.onCellSingleClick(row, column);
if (column == 1 || column == 4) {
onCellDoubleClick(row, column);
}

View File

@@ -66,6 +66,7 @@ public class UnifiedDiffTable extends AbstractPatchContentTable {
@Override
protected void onCellSingleClick(int row, int column) {
super.onCellSingleClick(row, column);
if (column == 1 || column == 2) {
if (!"".equals(table.getText(row, column))) {
onCellDoubleClick(row, column);

View File

@@ -20,6 +20,7 @@ import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.ScrollPanel;
@@ -34,6 +35,41 @@ import java.util.LinkedHashMap;
import java.util.Map.Entry;
public abstract class NavigationTable<RowItem> extends FancyFlexTable<RowItem> {
protected class MyFlexTable extends FancyFlexTable.MyFlexTable {
public MyFlexTable() {
sinkEvents(Event.ONDBLCLICK | Event.ONCLICK);
}
@Override
public void onBrowserEvent(final Event event) {
switch (DOM.eventGetType(event)) {
case Event.ONCLICK: {
// Find out which cell was actually clicked.
final Element td = getEventTargetCell(event);
if (td == null) {
break;
}
final int row = rowOf(td);
if (getRowItem(row) != null) {
onCellSingleClick(rowOf(td), columnOf(td));
return;
}
break;
}
case Event.ONDBLCLICK: {
// Find out which cell was actually clicked.
Element td = getEventTargetCell(event);
if (td == null) {
return;
}
onCellDoubleClick(rowOf(td), columnOf(td));
return;
}
}
super.onBrowserEvent(event);
}
}
@SuppressWarnings("serial")
private static final LinkedHashMap<String, Object> savedPositions =
new LinkedHashMap<String, Object>(10, 0.75f, true) {
@@ -91,6 +127,16 @@ public abstract class NavigationTable<RowItem> extends FancyFlexTable<RowItem> {
}
}
/** Invoked when the user double clicks on a table cell. */
protected void onCellDoubleClick(int row, int column) {
movePointerTo(row);
}
/** Invoked when the user clicks on a table cell. */
protected void onCellSingleClick(int row, int column) {
onOpenRow(row);
}
protected int getCurrentRow() {
return currentRow;
}
@@ -259,6 +305,11 @@ public abstract class NavigationTable<RowItem> extends FancyFlexTable<RowItem> {
super.onUnload();
}
@Override
protected MyFlexTable createFlexTable() {
return new MyFlexTable();
}
public class PrevKeyCommand extends KeyCommand {
public PrevKeyCommand(int mask, char key, String help) {
super(mask, key, help);

View File

@@ -18,9 +18,6 @@ import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.projects.ProjectInfo;
import com.google.gerrit.client.projects.ProjectMap;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
import java.util.Collections;
@@ -47,43 +44,6 @@ public class ProjectsTable extends NavigationTable<ProjectInfo> {
fmt.addStyleName(0, 2, Gerrit.RESOURCES.css().dataHeader());
}
@Override
protected MyFlexTable createFlexTable() {
MyFlexTable table = new MyFlexTable() {
@Override
public void onBrowserEvent(final Event event) {
switch (DOM.eventGetType(event)) {
case Event.ONCLICK: {
// Find out which cell was actually clicked.
final Element td = getEventTargetCell(event);
if (td == null) {
break;
}
final int row = rowOf(td);
if (getRowItem(row) != null) {
ProjectsTable.this.movePointerTo(row);
return;
}
break;
}
case Event.ONDBLCLICK: {
// Find out which cell was actually clicked.
Element td = getEventTargetCell(event);
if (td == null) {
return;
}
onOpenRow(rowOf(td));
return;
}
}
super.onBrowserEvent(event);
}
};
table.sinkEvents(Event.ONDBLCLICK | Event.ONCLICK);
return table;
}
@Override
protected Object getRowItemKey(final ProjectInfo item) {
return item.name();