//Copyright (C) 2013 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.diff; import com.google.gerrit.client.changes.CommentInfo; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.event.dom.client.MouseOverEvent; import com.google.gwt.event.dom.client.MouseOverHandler; import com.google.gwt.user.client.ui.Composite; import net.codemirror.lib.CodeMirror; import net.codemirror.lib.Configuration; import net.codemirror.lib.TextMarker; import net.codemirror.lib.TextMarker.FromTo; /** An HtmlPanel for displaying a comment */ abstract class CommentBox extends Composite { static { Resources.I.style().ensureInjected(); } private final CommentGroup group; private OverviewBar.MarkHandle mark; private FromTo fromTo; private TextMarker rangeMarker; private TextMarker rangeHighlightMarker; CommentBox(CommentGroup group, CommentRange range) { this.group = group; if (range != null) { fromTo = FromTo.create(range); rangeMarker = group.getCm().markText( fromTo.getFrom(), fromTo.getTo(), Configuration.create() .set("className", DiffTable.style.range())); } addDomHandler(new MouseOverHandler() { @Override public void onMouseOver(MouseOverEvent event) { setRangeHighlight(true); } }, MouseOverEvent.getType()); addDomHandler(new MouseOutHandler() { @Override public void onMouseOut(MouseOutEvent event) { setRangeHighlight(isOpen()); } }, MouseOutEvent.getType()); } abstract CommentInfo getCommentInfo(); abstract boolean isOpen(); void setOpen(boolean open) { group.resize(); setRangeHighlight(open); getCm().focus(); } CommentGroup getCommentGroup() { return group; } CommentManager getCommentManager() { return group.getCommentManager(); } OverviewBar.MarkHandle getMark() { return mark; } void setMark(OverviewBar.MarkHandle mh) { mark = mh; } void setRangeHighlight(boolean highlight) { if (fromTo != null) { if (highlight && rangeHighlightMarker == null) { rangeHighlightMarker = group.getCm().markText( fromTo.getFrom(), fromTo.getTo(), Configuration.create() .set("className", DiffTable.style.rangeHighlight())); } else if (!highlight && rangeHighlightMarker != null) { rangeHighlightMarker.clear(); rangeHighlightMarker = null; } } } void clearRange() { if (rangeMarker != null) { rangeMarker.clear(); rangeMarker = null; } } CodeMirror getCm() { return group.getCm(); } FromTo getFromTo() { return fromTo; } }