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);
|
||||
}
|
||||
|
||||
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) {
|
||||
if (b && getIntraLineStatus() == DiffInfo.IntraLineStatus.OFF) {
|
||||
@@ -905,8 +913,8 @@ abstract class DiffScreen extends Screen {
|
||||
private GutterClickHandler onGutterClick(final CodeMirror cm) {
|
||||
return new GutterClickHandler() {
|
||||
@Override
|
||||
public void handle(CodeMirror instance, final int line, final String gutterClass,
|
||||
NativeEvent clickEvent) {
|
||||
public void handle(CodeMirror instance, final int line,
|
||||
final String gutterClass, NativeEvent clickEvent) {
|
||||
if (clickEvent.getButton() == NativeEvent.BUTTON_LEFT
|
||||
&& !clickEvent.getMetaKey()
|
||||
&& !clickEvent.getAltKey()
|
||||
@@ -916,7 +924,8 @@ abstract class DiffScreen extends Screen {
|
||||
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
|
||||
@Override
|
||||
public void execute() {
|
||||
getCommentManager().newDraftOnGutterClick(cm, gutterClass, line + 1);
|
||||
getCommentManager().newDraftOnGutterClick(
|
||||
cm, gutterClass, line + 1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -35,6 +35,7 @@
|
||||
margin: 0 0 3px 0;
|
||||
}
|
||||
|
||||
@external .dark, .noIntraline;
|
||||
@external .dark, .noIntraline, .showLineNumbers;
|
||||
.dark {}
|
||||
.noIntraline {}
|
||||
.noIntraline {}
|
||||
.showLineNumbers {}
|
@@ -46,6 +46,7 @@ abstract class DiffTable extends Composite {
|
||||
String range();
|
||||
String rangeHighlight();
|
||||
String diffHeader();
|
||||
String showLineNumbers();
|
||||
}
|
||||
|
||||
@UiField Element patchSetNavRow;
|
||||
|
@@ -185,7 +185,7 @@ public class SideBySide extends DiffScreen {
|
||||
setThemeStyles(prefs.theme().isDark());
|
||||
setShowIntraline(prefs.intralineDifference());
|
||||
if (prefs.showLineNumbers()) {
|
||||
diffTable.addStyleName(SideBySideTable.style.showLineNumbers());
|
||||
diffTable.addStyleName(Resources.I.diffTableStyle().showLineNumbers());
|
||||
}
|
||||
|
||||
cmA = newCm(diff.metaA(), diff.textA(), diffTable.cmA);
|
||||
@@ -260,13 +260,10 @@ public class SideBySide extends DiffScreen {
|
||||
|
||||
@Override
|
||||
void setShowLineNumbers(boolean b) {
|
||||
super.setShowLineNumbers(b);
|
||||
|
||||
cmA.setOption("lineNumbers", b);
|
||||
cmB.setOption("lineNumbers", b);
|
||||
if (b) {
|
||||
diffTable.addStyleName(SideBySideTable.style.showLineNumbers());
|
||||
} else {
|
||||
diffTable.removeStyleName(SideBySideTable.style.showLineNumbers());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -34,7 +34,6 @@ class SideBySideTable extends DiffTable {
|
||||
interface DiffTableStyle extends CssResource {
|
||||
String intralineBg();
|
||||
String diff();
|
||||
String showLineNumbers();
|
||||
String hideA();
|
||||
String hideB();
|
||||
String padding();
|
||||
|
@@ -17,15 +17,15 @@ limitations under the License.
|
||||
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
|
||||
xmlns:g='urn:import:com.google.gwt.user.client.ui'
|
||||
xmlns:d='urn:import:com.google.gerrit.client.diff'>
|
||||
<ui:with field='res' type='com.google.gerrit.client.diff.Resources'/>
|
||||
<ui:with field='res' type='com.google.gerrit.client.diff.Resources'/>
|
||||
<ui:style gss='false' type='com.google.gerrit.client.diff.SideBySideTable.DiffTableStyle'>
|
||||
@external .CodeMirror, .CodeMirror-selectedtext;
|
||||
@external .CodeMirror-linenumber;
|
||||
@external .CodeMirror-overlayscroll-vertical, .CodeMirror-scroll;
|
||||
@external .CodeMirror-dialog-bottom;
|
||||
@external .CodeMirror-cursor;
|
||||
|
||||
@external .dark, .noIntraline;
|
||||
|
||||
@external .dark, .noIntraline, .showLineNumbers;
|
||||
|
||||
.difftable .patchSetNav,
|
||||
.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.ui.FlowPanel;
|
||||
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 net.codemirror.lib.CodeMirror;
|
||||
@@ -174,7 +174,9 @@ public class Unified extends DiffScreen {
|
||||
final DiffInfo diff = getDiff();
|
||||
setThemeStyles(prefs.theme().isDark());
|
||||
setShowIntraline(prefs.intralineDifference());
|
||||
// TODO: Handle showLineNumbers preference
|
||||
if (prefs.showLineNumbers()) {
|
||||
diffTable.addStyleName(Resources.I.diffTableStyle().showLineNumbers());
|
||||
}
|
||||
|
||||
cm = newCm(
|
||||
diff.metaA() == null ? diff.metaB() : diff.metaA(),
|
||||
@@ -248,16 +250,29 @@ public class Unified extends DiffScreen {
|
||||
|
||||
@Override
|
||||
void setShowLineNumbers(boolean b) {
|
||||
// TODO: Implement this
|
||||
super.setShowLineNumbers(b);
|
||||
|
||||
cm.refresh();
|
||||
}
|
||||
|
||||
LineHandle setLineNumber(DisplaySide side, final int cmLine, int line) {
|
||||
Label gutter = new Label(String.valueOf(line));
|
||||
private void setLineNumber(DisplaySide side, int cmLine, String html,
|
||||
String styleName) {
|
||||
InlineHTML gutter = new InlineHTML(html);
|
||||
diffTable.add(gutter);
|
||||
gutter.setStyleName(UnifiedTable.style.unifiedLineNumber());
|
||||
return cm.setGutterMarker(cmLine,
|
||||
side == DisplaySide.A ? UnifiedTable.style.lineNumbersLeft()
|
||||
: UnifiedTable.style.lineNumbersRight(), gutter.getElement());
|
||||
gutter.setStyleName(styleName);
|
||||
cm.setGutterMarker(cmLine, side == DisplaySide.A
|
||||
? UnifiedTable.style.lineNumbersLeft()
|
||||
: 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
|
||||
|
@@ -109,6 +109,8 @@ class UnifiedChunkManager extends ChunkManager {
|
||||
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) {
|
||||
@@ -141,11 +143,13 @@ class UnifiedChunkManager extends ChunkManager {
|
||||
addDiffChunk(DisplaySide.A, endA, endB, aLen, cmLine, bLen > 0);
|
||||
for (int j = 0; j < aLen; j++) {
|
||||
host.setLineNumber(DisplaySide.A, cmLine + j, startA + j + 1);
|
||||
host.setLineNumberEmpty(DisplaySide.B, cmLine + j);
|
||||
}
|
||||
}
|
||||
if (bLen > 0) {
|
||||
addDiffChunk(DisplaySide.B, endB, endA, bLen, cmLine + aLen, aLen > 0);
|
||||
for (int j = 0; j < bLen; j++) {
|
||||
host.setLineNumberEmpty(DisplaySide.A, cmLine + aLen + j);
|
||||
host.setLineNumber(DisplaySide.B, cmLine + aLen + j, startB + j + 1);
|
||||
}
|
||||
}
|
||||
|
@@ -36,6 +36,7 @@ class UnifiedTable extends DiffTable {
|
||||
String diffInsert();
|
||||
String diffDelete();
|
||||
String unifiedLineNumber();
|
||||
String unifiedLineNumberEmpty();
|
||||
String lineNumbersLeft();
|
||||
String lineNumbersRight();
|
||||
}
|
||||
|
@@ -24,7 +24,7 @@ limitations under the License.
|
||||
@external .CodeMirror-dialog-bottom;
|
||||
@external .CodeMirror-cursor;
|
||||
|
||||
@external .dark, .unifiedLineNumber, .noIntraline;
|
||||
@external .dark, .unifiedLineNumber, .noIntraline, .showLineNumbers;
|
||||
|
||||
.difftable .patchSetNav,
|
||||
.difftable .CodeMirror {
|
||||
@@ -94,21 +94,33 @@ limitations under the License.
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
.lineNumbersLeft, .lineNumbersRight {
|
||||
.showLineNumbers .lineNumbersLeft, .showLineNumbers .lineNumbersRight {
|
||||
min-width: 20px;
|
||||
width: 3em; /* TODO: This needs to be set based on number of lines */
|
||||
}
|
||||
.lineNumbersLeft {
|
||||
.showLineNumbers .lineNumbersLeft {
|
||||
border-right: 1px solid #ddd;
|
||||
}
|
||||
.unifiedLineNumber {
|
||||
display: none;
|
||||
}
|
||||
.showLineNumbers .unifiedLineNumber {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
padding: 0 3px 0 5px;
|
||||
min-width: 20px;
|
||||
text-align: right;
|
||||
color: #999;
|
||||
}
|
||||
.unifiedLineNumberEmpty {
|
||||
display: none;
|
||||
}
|
||||
.showLineNumbers .unifiedLineNumberEmpty {
|
||||
display: block;
|
||||
margin-left: 28px;
|
||||
border-left: 2px solid #d64040;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
</ui:style>
|
||||
<g:HTMLPanel styleName='{style.difftable}'>
|
||||
<table class='{style.table}'>
|
||||
|
Reference in New Issue
Block a user