Merge "Show side A in CodeMirrorDemo."

This commit is contained in:
Shawn Pearce 2013-05-22 04:03:49 +00:00 committed by Gerrit Code Review
commit c6c91ed0f8

View File

@ -19,9 +19,11 @@ import com.google.gerrit.client.rpc.GerritCallback;
import com.google.gerrit.client.rpc.ScreenLoadCallback; import com.google.gerrit.client.rpc.ScreenLoadCallback;
import com.google.gerrit.client.ui.Screen; import com.google.gerrit.client.ui.Screen;
import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Window; import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FlowPanel;
@ -36,7 +38,8 @@ public class CodeMirrorDemo extends Screen {
private final String path; private final String path;
private FlowPanel editorContainer; private FlowPanel editorContainer;
private CodeMirror cm; private CodeMirror cmA;
private CodeMirror cmB;
private HandlerRegistration resizeHandler; private HandlerRegistration resizeHandler;
public CodeMirrorDemo( public CodeMirrorDemo(
@ -87,41 +90,61 @@ public class CodeMirrorDemo extends Screen {
@Override @Override
public void onShowView() { public void onShowView() {
super.onShowView(); super.onShowView();
cm.refresh(); cmA.refresh();
cmB.refresh();
} }
@Override @Override
protected void onUnload() { protected void onUnload() {
super.onUnload(); super.onUnload();
if (resizeHandler != null) { if (resizeHandler != null) {
resizeHandler.removeHandler(); resizeHandler.removeHandler();
resizeHandler = null; resizeHandler = null;
} }
if (cm != null) { if (cmA != null) {
cm.getWrapperElement().removeFromParent(); cmA.getWrapperElement().removeFromParent();
cm = null; cmA = null;
}
if (cmB != null) {
cmB.getWrapperElement().removeFromParent();
cmB = null;
} }
} }
private void display(DiffInfo diff) { private void display(DiffInfo diff) {
cmA = displaySide(diff.meta_a(), diff.text_a());
cmB = displaySide(diff.meta_b(), diff.text_b());
resizeHandler = Window.addResizeHandler(new ResizeHandler() {
@Override
public void onResize(ResizeEvent event) {
if (cmA != null) {
cmA.setHeight(event.getHeight() - HEADER_FOOTER);
cmA.refresh();
}
if (cmB != null) {
cmB.setHeight(event.getHeight() - HEADER_FOOTER);
cmB.refresh();
}
}
});
}
private CodeMirror displaySide(DiffInfo.FileMeta meta, String contents) {
if (meta == null) {
return null; // TODO: Handle empty contents
}
Configuration cfg = Configuration.create() Configuration cfg = Configuration.create()
.set("readOnly", true) .set("readOnly", true)
.set("lineNumbers", true) .set("lineNumbers", true)
.set("tabSize", 2) .set("tabSize", 2)
.set("mode", getContentType(diff.meta_b())) .set("mode", getContentType(meta))
.set("value", diff.text_b()); .set("value", contents);
Element child = DOM.createDiv();
cm = CodeMirror.create(editorContainer.getElement(), cfg); editorContainer.getElement().appendChild(child);
final CodeMirror cm = CodeMirror.create(child, cfg);
cm.setWidth("100%"); cm.setWidth("100%");
cm.setHeight(Window.getClientHeight() - HEADER_FOOTER); cm.setHeight(Window.getClientHeight() - HEADER_FOOTER);
resizeHandler = Window.addResizeHandler(new ResizeHandler() { return cm;
@Override
public void onResize(ResizeEvent event) {
cm.setHeight(event.getHeight() - HEADER_FOOTER);
cm.refresh();
}
});
} }
private static String getContentType(DiffInfo.FileMeta meta) { private static String getContentType(DiffInfo.FileMeta meta) {