Unified: Handle "showLineNumbers" preference
Make Unified respect the "showLineNumbers" preference. To make the UI consistent with SideBySide, also show the same red bar on placeholder gutters (those without line numbers) for diff gaps. Again for consistency with SideBySide, show an extra pair of line numbers at the end of the file representing the trailing newline. Change-Id: I1eb56cb1d53e95adadc070b16f31caf16284f7a9
This commit is contained in:
@@ -576,7 +576,15 @@ abstract class DiffScreen extends Screen {
|
|||||||
getChunkManager().render(diff);
|
getChunkManager().render(diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract void setShowLineNumbers(boolean b);
|
void setShowLineNumbers(boolean b) {
|
||||||
|
if (b) {
|
||||||
|
getDiffTable().addStyleName(
|
||||||
|
Resources.I.diffTableStyle().showLineNumbers());
|
||||||
|
} else {
|
||||||
|
getDiffTable().removeStyleName(
|
||||||
|
Resources.I.diffTableStyle().showLineNumbers());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void setShowIntraline(boolean b) {
|
void setShowIntraline(boolean b) {
|
||||||
if (b && getIntraLineStatus() == DiffInfo.IntraLineStatus.OFF) {
|
if (b && getIntraLineStatus() == DiffInfo.IntraLineStatus.OFF) {
|
||||||
@@ -905,8 +913,8 @@ abstract class DiffScreen extends Screen {
|
|||||||
private GutterClickHandler onGutterClick(final CodeMirror cm) {
|
private GutterClickHandler onGutterClick(final CodeMirror cm) {
|
||||||
return new GutterClickHandler() {
|
return new GutterClickHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(CodeMirror instance, final int line, final String gutterClass,
|
public void handle(CodeMirror instance, final int line,
|
||||||
NativeEvent clickEvent) {
|
final String gutterClass, NativeEvent clickEvent) {
|
||||||
if (clickEvent.getButton() == NativeEvent.BUTTON_LEFT
|
if (clickEvent.getButton() == NativeEvent.BUTTON_LEFT
|
||||||
&& !clickEvent.getMetaKey()
|
&& !clickEvent.getMetaKey()
|
||||||
&& !clickEvent.getAltKey()
|
&& !clickEvent.getAltKey()
|
||||||
@@ -916,7 +924,8 @@ abstract class DiffScreen extends Screen {
|
|||||||
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
|
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
|
||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
getCommentManager().newDraftOnGutterClick(cm, gutterClass, line + 1);
|
getCommentManager().newDraftOnGutterClick(
|
||||||
|
cm, gutterClass, line + 1);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
margin: 0 0 3px 0;
|
margin: 0 0 3px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@external .dark, .noIntraline;
|
@external .dark, .noIntraline, .showLineNumbers;
|
||||||
.dark {}
|
.dark {}
|
||||||
.noIntraline {}
|
.noIntraline {}
|
||||||
|
.showLineNumbers {}
|
||||||
@@ -46,6 +46,7 @@ abstract class DiffTable extends Composite {
|
|||||||
String range();
|
String range();
|
||||||
String rangeHighlight();
|
String rangeHighlight();
|
||||||
String diffHeader();
|
String diffHeader();
|
||||||
|
String showLineNumbers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@UiField Element patchSetNavRow;
|
@UiField Element patchSetNavRow;
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ public class SideBySide extends DiffScreen {
|
|||||||
setThemeStyles(prefs.theme().isDark());
|
setThemeStyles(prefs.theme().isDark());
|
||||||
setShowIntraline(prefs.intralineDifference());
|
setShowIntraline(prefs.intralineDifference());
|
||||||
if (prefs.showLineNumbers()) {
|
if (prefs.showLineNumbers()) {
|
||||||
diffTable.addStyleName(SideBySideTable.style.showLineNumbers());
|
diffTable.addStyleName(Resources.I.diffTableStyle().showLineNumbers());
|
||||||
}
|
}
|
||||||
|
|
||||||
cmA = newCm(diff.metaA(), diff.textA(), diffTable.cmA);
|
cmA = newCm(diff.metaA(), diff.textA(), diffTable.cmA);
|
||||||
@@ -260,13 +260,10 @@ public class SideBySide extends DiffScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
void setShowLineNumbers(boolean b) {
|
void setShowLineNumbers(boolean b) {
|
||||||
|
super.setShowLineNumbers(b);
|
||||||
|
|
||||||
cmA.setOption("lineNumbers", b);
|
cmA.setOption("lineNumbers", b);
|
||||||
cmB.setOption("lineNumbers", b);
|
cmB.setOption("lineNumbers", b);
|
||||||
if (b) {
|
|
||||||
diffTable.addStyleName(SideBySideTable.style.showLineNumbers());
|
|
||||||
} else {
|
|
||||||
diffTable.removeStyleName(SideBySideTable.style.showLineNumbers());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ class SideBySideTable extends DiffTable {
|
|||||||
interface DiffTableStyle extends CssResource {
|
interface DiffTableStyle extends CssResource {
|
||||||
String intralineBg();
|
String intralineBg();
|
||||||
String diff();
|
String diff();
|
||||||
String showLineNumbers();
|
|
||||||
String hideA();
|
String hideA();
|
||||||
String hideB();
|
String hideB();
|
||||||
String padding();
|
String padding();
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ limitations under the License.
|
|||||||
@external .CodeMirror-dialog-bottom;
|
@external .CodeMirror-dialog-bottom;
|
||||||
@external .CodeMirror-cursor;
|
@external .CodeMirror-cursor;
|
||||||
|
|
||||||
@external .dark, .noIntraline;
|
@external .dark, .noIntraline, .showLineNumbers;
|
||||||
|
|
||||||
.difftable .patchSetNav,
|
.difftable .patchSetNav,
|
||||||
.difftable .CodeMirror {
|
.difftable .CodeMirror {
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ import com.google.gwt.user.client.Window;
|
|||||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
import com.google.gwt.user.client.ui.FlowPanel;
|
import com.google.gwt.user.client.ui.FlowPanel;
|
||||||
import com.google.gwt.user.client.ui.ImageResourceRenderer;
|
import com.google.gwt.user.client.ui.ImageResourceRenderer;
|
||||||
import com.google.gwt.user.client.ui.Label;
|
import com.google.gwt.user.client.ui.InlineHTML;
|
||||||
import com.google.gwtexpui.globalkey.client.GlobalKey;
|
import com.google.gwtexpui.globalkey.client.GlobalKey;
|
||||||
|
|
||||||
import net.codemirror.lib.CodeMirror;
|
import net.codemirror.lib.CodeMirror;
|
||||||
@@ -174,7 +174,9 @@ public class Unified extends DiffScreen {
|
|||||||
final DiffInfo diff = getDiff();
|
final DiffInfo diff = getDiff();
|
||||||
setThemeStyles(prefs.theme().isDark());
|
setThemeStyles(prefs.theme().isDark());
|
||||||
setShowIntraline(prefs.intralineDifference());
|
setShowIntraline(prefs.intralineDifference());
|
||||||
// TODO: Handle showLineNumbers preference
|
if (prefs.showLineNumbers()) {
|
||||||
|
diffTable.addStyleName(Resources.I.diffTableStyle().showLineNumbers());
|
||||||
|
}
|
||||||
|
|
||||||
cm = newCm(
|
cm = newCm(
|
||||||
diff.metaA() == null ? diff.metaB() : diff.metaA(),
|
diff.metaA() == null ? diff.metaB() : diff.metaA(),
|
||||||
@@ -248,18 +250,31 @@ public class Unified extends DiffScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
void setShowLineNumbers(boolean b) {
|
void setShowLineNumbers(boolean b) {
|
||||||
// TODO: Implement this
|
super.setShowLineNumbers(b);
|
||||||
|
|
||||||
|
cm.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
LineHandle setLineNumber(DisplaySide side, final int cmLine, int line) {
|
private void setLineNumber(DisplaySide side, int cmLine, String html,
|
||||||
Label gutter = new Label(String.valueOf(line));
|
String styleName) {
|
||||||
|
InlineHTML gutter = new InlineHTML(html);
|
||||||
diffTable.add(gutter);
|
diffTable.add(gutter);
|
||||||
gutter.setStyleName(UnifiedTable.style.unifiedLineNumber());
|
gutter.setStyleName(styleName);
|
||||||
return cm.setGutterMarker(cmLine,
|
cm.setGutterMarker(cmLine, side == DisplaySide.A
|
||||||
side == DisplaySide.A ? UnifiedTable.style.lineNumbersLeft()
|
? UnifiedTable.style.lineNumbersLeft()
|
||||||
: UnifiedTable.style.lineNumbersRight(), gutter.getElement());
|
: UnifiedTable.style.lineNumbersRight(), gutter.getElement());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setLineNumber(DisplaySide side, int cmLine, int line) {
|
||||||
|
setLineNumber(side, cmLine, String.valueOf(line),
|
||||||
|
UnifiedTable.style.unifiedLineNumber());
|
||||||
|
}
|
||||||
|
|
||||||
|
void setLineNumberEmpty(DisplaySide side, int cmLine) {
|
||||||
|
setLineNumber(side, cmLine, " ",
|
||||||
|
UnifiedTable.style.unifiedLineNumberEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void setSyntaxHighlighting(boolean b) {
|
void setSyntaxHighlighting(boolean b) {
|
||||||
final DiffInfo diff = getDiff();
|
final DiffInfo diff = getDiff();
|
||||||
|
|||||||
@@ -109,6 +109,8 @@ class UnifiedChunkManager extends ChunkManager {
|
|||||||
cmLine += render(current, cmLine, useIntralineBg);
|
cmLine += render(current, cmLine, useIntralineBg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
host.setLineNumber(DisplaySide.A, cmLine, lineMapper.getLineA() + 1);
|
||||||
|
host.setLineNumber(DisplaySide.B, cmLine, lineMapper.getLineB() + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int render(Region region, int cmLine, boolean useIntralineBg) {
|
private int render(Region region, int cmLine, boolean useIntralineBg) {
|
||||||
@@ -141,11 +143,13 @@ class UnifiedChunkManager extends ChunkManager {
|
|||||||
addDiffChunk(DisplaySide.A, endA, endB, aLen, cmLine, bLen > 0);
|
addDiffChunk(DisplaySide.A, endA, endB, aLen, cmLine, bLen > 0);
|
||||||
for (int j = 0; j < aLen; j++) {
|
for (int j = 0; j < aLen; j++) {
|
||||||
host.setLineNumber(DisplaySide.A, cmLine + j, startA + j + 1);
|
host.setLineNumber(DisplaySide.A, cmLine + j, startA + j + 1);
|
||||||
|
host.setLineNumberEmpty(DisplaySide.B, cmLine + j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bLen > 0) {
|
if (bLen > 0) {
|
||||||
addDiffChunk(DisplaySide.B, endB, endA, bLen, cmLine + aLen, aLen > 0);
|
addDiffChunk(DisplaySide.B, endB, endA, bLen, cmLine + aLen, aLen > 0);
|
||||||
for (int j = 0; j < bLen; j++) {
|
for (int j = 0; j < bLen; j++) {
|
||||||
|
host.setLineNumberEmpty(DisplaySide.A, cmLine + aLen + j);
|
||||||
host.setLineNumber(DisplaySide.B, cmLine + aLen + j, startB + j + 1);
|
host.setLineNumber(DisplaySide.B, cmLine + aLen + j, startB + j + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ class UnifiedTable extends DiffTable {
|
|||||||
String diffInsert();
|
String diffInsert();
|
||||||
String diffDelete();
|
String diffDelete();
|
||||||
String unifiedLineNumber();
|
String unifiedLineNumber();
|
||||||
|
String unifiedLineNumberEmpty();
|
||||||
String lineNumbersLeft();
|
String lineNumbersLeft();
|
||||||
String lineNumbersRight();
|
String lineNumbersRight();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ limitations under the License.
|
|||||||
@external .CodeMirror-dialog-bottom;
|
@external .CodeMirror-dialog-bottom;
|
||||||
@external .CodeMirror-cursor;
|
@external .CodeMirror-cursor;
|
||||||
|
|
||||||
@external .dark, .unifiedLineNumber, .noIntraline;
|
@external .dark, .unifiedLineNumber, .noIntraline, .showLineNumbers;
|
||||||
|
|
||||||
.difftable .patchSetNav,
|
.difftable .patchSetNav,
|
||||||
.difftable .CodeMirror {
|
.difftable .CodeMirror {
|
||||||
@@ -94,21 +94,33 @@ limitations under the License.
|
|||||||
bottom: auto;
|
bottom: auto;
|
||||||
left: auto;
|
left: auto;
|
||||||
}
|
}
|
||||||
|
.showLineNumbers .lineNumbersLeft, .showLineNumbers .lineNumbersRight {
|
||||||
.lineNumbersLeft, .lineNumbersRight {
|
|
||||||
min-width: 20px;
|
min-width: 20px;
|
||||||
width: 3em; /* TODO: This needs to be set based on number of lines */
|
width: 3em; /* TODO: This needs to be set based on number of lines */
|
||||||
}
|
}
|
||||||
.lineNumbersLeft {
|
.showLineNumbers .lineNumbersLeft {
|
||||||
border-right: 1px solid #ddd;
|
border-right: 1px solid #ddd;
|
||||||
}
|
}
|
||||||
.unifiedLineNumber {
|
.unifiedLineNumber {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.showLineNumbers .unifiedLineNumber {
|
||||||
|
display: block;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 0 3px 0 5px;
|
padding: 0 3px 0 5px;
|
||||||
min-width: 20px;
|
min-width: 20px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
|
.unifiedLineNumberEmpty {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.showLineNumbers .unifiedLineNumberEmpty {
|
||||||
|
display: block;
|
||||||
|
margin-left: 28px;
|
||||||
|
border-left: 2px solid #d64040;
|
||||||
|
padding-bottom: 1px;
|
||||||
|
}
|
||||||
</ui:style>
|
</ui:style>
|
||||||
<g:HTMLPanel styleName='{style.difftable}'>
|
<g:HTMLPanel styleName='{style.difftable}'>
|
||||||
<table class='{style.table}'>
|
<table class='{style.table}'>
|
||||||
|
|||||||
Reference in New Issue
Block a user