// Copyright 2004-2014 Jim Voris
//
// 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.qumasoft.guitools.merge;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.font.TextAttribute;
import java.text.AttributedString;
import javax.swing.JLabel;
/**
* Merged descendent file content row.
* @author Jim Voris
*/
public class MergedDescendentFileContentRow extends JLabel {
private static final long serialVersionUID = 2094081418324953231L;
static final byte ROWTYPE_NORMAL = 10;
static final byte ROWTYPE_INSERT = 11;
static final byte ROWTYPE_DELETE = 12;
static final byte ROWTYPE_REPLACE = 13;
static final byte ROWTYPE_BLANK = 14; // A blank line (i.e. the string's length is 0;
static final byte ROWTYPE_EMPTY = 15; // A null line (i.e. the line does not exist for the given context).
static final byte ROWTYPE_UNDEFINED = 16;
private final Font font;
private boolean overlapFlag;
private byte ancestorRowType;
private int ancestorFileLineNumber;
private int ancestorFileOriginalLineNumber;
private long ancestorSeekPosition;
private String ancestorText;
private int applyDescendentEditIndex;
private byte firstDescendentRowType;
private int firstDescendentLineNumber;
private String firstDescendentText;
private EditInfo firstDescendentEditInfo = null;
private boolean firstDescendentCheckBoxVisibleFlag = false;
private byte secondDescendentRowType;
private int secondDescendentLineNumber;
private String secondDescendentText;
private EditInfo secondDescendentEditInfo = null;
private boolean secondDescendentCheckBoxVisibleFlag = false;
private boolean rowDeletedFlag = false;
private boolean isSelectedFlag = false;
MergedDescendentFileContentRow(Font f) {
this.ancestorRowType = ROWTYPE_UNDEFINED;
this.firstDescendentRowType = ROWTYPE_UNDEFINED;
this.secondDescendentRowType = ROWTYPE_UNDEFINED;
this.font = f;
this.overlapFlag = false;
this.isSelectedFlag = false;
this.applyDescendentEditIndex = 0;
}
void setApplyDecendentEdit(int decendentIndex) {
assert (decendentIndex >= 0 && decendentIndex <= 2);
applyDescendentEditIndex = decendentIndex;
}
int getApplyDecendentEditIndex() {
return applyDescendentEditIndex;
}
EditInfo getFirstDecendentEditInfo() {
return firstDescendentEditInfo;
}
void setFirstDecendentEditInfo(EditInfo editInfo) {
this.firstDescendentEditInfo = editInfo;
}
EditInfo getSecondDecendentEditInfo() {
return secondDescendentEditInfo;
}
void setSecondDecendentEditInfo(EditInfo editInfo) {
secondDescendentEditInfo = editInfo;
}
byte getAncestorRowType() {
return ancestorRowType;
}
void setAncestorRowType(byte rowType) {
ancestorRowType = rowType;
}
String getAncestorText() {
return ancestorText;
}
void setAncestorText(final String text) {
ancestorText = text;
}
int getAncestorLineNumber() {
return ancestorFileLineNumber;
}
void setAncestorLineNumber(int lineNumber) {
ancestorFileLineNumber = lineNumber;
}
int getAncestorOriginalLineNumber() {
return ancestorFileOriginalLineNumber;
}
void setAncestorOriginalLineNumber(int lineNumber) {
ancestorFileOriginalLineNumber = lineNumber;
}
long getAncestorSeekPosition() {
return ancestorSeekPosition;
}
void setAncestorSeekPosition(long seekPosition) {
ancestorSeekPosition = seekPosition;
}
byte getFirstDecendentRowType() {
return firstDescendentRowType;
}
void setFirstDecendentRowType(byte rowType) {
firstDescendentRowType = rowType;
}
int getFirstDecendentLineNumber() {
return firstDescendentLineNumber;
}
void setFirstDecendentLineNumber(int lineNumber) {
firstDescendentLineNumber = lineNumber;
}
String getFirstDecendentText() {
return firstDescendentText;
}
void setFirstDecendentText(String text) {
firstDescendentText = text;
}
byte getSecondDecendentRowType() {
return secondDescendentRowType;
}
void setSecondDecendentRowType(byte rowType) {
secondDescendentRowType = rowType;
}
int getSecondDecendentLineNumber() {
return secondDescendentLineNumber;
}
void setSecondDecendentLineNumber(int lineNumber) {
secondDescendentLineNumber = lineNumber;
}
String getSecondDecendentText() {
return secondDescendentText;
}
void setSecondDecendentText(String text) {
secondDescendentText = text;
}
void setRowDeletedFlag(boolean flag) {
rowDeletedFlag = flag;
}
boolean getRowDeletedFlag() {
return rowDeletedFlag;
}
void setOverlapFlag(boolean flag) {
overlapFlag = flag;
}
boolean getOverlapFlag() {
return overlapFlag;
}
void setIsSelectedFlag(boolean flag) {
isSelectedFlag = flag;
}
boolean getIsSelectedFlag() {
return isSelectedFlag;
}
void setFirstDecendentCheckBoxVisibleFlag(boolean flag) {
firstDescendentCheckBoxVisibleFlag = flag;
}
boolean getFirstDecendentCheckBoxVisibleFlag() {
return firstDescendentCheckBoxVisibleFlag;
}
void setSecondDecendentCheckBoxVisibleFlag(boolean flag) {
secondDescendentCheckBoxVisibleFlag = flag;
}
boolean getSecondDecendentCheckBoxVisibleFlag() {
return secondDescendentCheckBoxVisibleFlag;
}
@Override
public void paint(Graphics g) {
if (getRowDeletedFlag()) {
Graphics2D g2 = (Graphics2D) g;
String s = getText();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
if (s.length() > 0) {
AttributedString as = new AttributedString(s);
as.addAttribute(TextAttribute.FONT, font);
if (getIsSelectedFlag()) {
super.paint(g);
as.addAttribute(TextAttribute.FOREGROUND, getForeground());
as.addAttribute(TextAttribute.BACKGROUND, getBackground());
} else {
super.paint(g);
as.addAttribute(TextAttribute.FOREGROUND, ColorManager.getDeleteForegroundColor());
as.addAttribute(TextAttribute.BACKGROUND, ColorManager.getChangeBackgroundColor());
}
as.addAttribute(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
g2.drawString(as.getIterator(), 0, font.getSize());
} else {
super.paint(g);
}
} else {
super.paint(g);
}
}
}