/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.swing.diff;
import java.awt.Color;
import org.openflexo.diff.ComputeDiff.AdditionChange;
import org.openflexo.diff.ComputeDiff.DiffChange;
import org.openflexo.diff.ComputeDiff.ModificationChange;
import org.openflexo.diff.ComputeDiff.RemovalChange;
import org.openflexo.jedit.LinesHighlight;
public class DiffHighlight extends LinesHighlight {
private Color ADDITION_SELECTED_COLOR;
private Color ADDITION_UNSELECTED_COLOR;
private Color ADDITION_SELECTED_BORDER_COLOR;
private Color ADDITION_UNSELECTED_BORDER_COLOR;
private Color REMOVAL_SELECTED_COLOR;
private Color REMOVAL_UNSELECTED_COLOR;
private Color REMOVAL_SELECTED_BORDER_COLOR;
private Color REMOVAL_UNSELECTED_BORDER_COLOR;
private Color MODIFICATION_SELECTED_COLOR;
private Color MODIFICATION_UNSELECTED_COLOR;
private Color MODIFICATION_SELECTED_BORDER_COLOR;
private Color MODIFICATION_UNSELECTED_BORDER_COLOR;
private DiffTextArea diffTA;
private Color selectedBg;
private Color unselectedBg;
private Color selectedFg;
private Color unselectedFg;
public DiffHighlight(DiffChange change, DiffTextArea diffTA) {
super();
this.diffTA = diffTA;
setColors();
if (change instanceof ModificationChange) {
selectedBg = MODIFICATION_SELECTED_COLOR;
unselectedBg = MODIFICATION_UNSELECTED_COLOR;
selectedFg = MODIFICATION_SELECTED_BORDER_COLOR;
unselectedFg = MODIFICATION_UNSELECTED_BORDER_COLOR;
} else if (change instanceof RemovalChange) {
selectedBg = REMOVAL_SELECTED_COLOR;
unselectedBg = REMOVAL_UNSELECTED_COLOR;
selectedFg = REMOVAL_SELECTED_BORDER_COLOR;
unselectedFg = REMOVAL_UNSELECTED_BORDER_COLOR;
} else if (change instanceof AdditionChange) {
selectedBg = ADDITION_SELECTED_COLOR;
unselectedBg = ADDITION_UNSELECTED_COLOR;
selectedFg = ADDITION_SELECTED_BORDER_COLOR;
unselectedFg = ADDITION_UNSELECTED_BORDER_COLOR;
}
deselect();
}
private void setColors() {
ADDITION_SELECTED_COLOR = diffTA.isLeftOriented() ? new Color(255, 190, 182) : new Color(181, 213, 255);
ADDITION_UNSELECTED_COLOR = diffTA.isLeftOriented() ? new Color(255, 214, 214) : new Color(230, 255, 255);
ADDITION_SELECTED_BORDER_COLOR = diffTA.isLeftOriented() ? Color.RED : Color.BLUE;
ADDITION_UNSELECTED_BORDER_COLOR = ADDITION_SELECTED_COLOR;
REMOVAL_SELECTED_COLOR = diffTA.isLeftOriented() ? new Color(181, 213, 255) : new Color(255, 190, 182);
REMOVAL_UNSELECTED_COLOR = diffTA.isLeftOriented() ? new Color(230, 255, 255) : new Color(255, 214, 214);
REMOVAL_SELECTED_BORDER_COLOR = diffTA.isLeftOriented() ? Color.BLUE : Color.RED;
REMOVAL_UNSELECTED_BORDER_COLOR = REMOVAL_SELECTED_COLOR;
MODIFICATION_SELECTED_COLOR = new Color(255, 248, 150);
MODIFICATION_UNSELECTED_COLOR = new Color(254, 254, 224);
MODIFICATION_SELECTED_BORDER_COLOR = Color.BLACK;
MODIFICATION_UNSELECTED_BORDER_COLOR = MODIFICATION_SELECTED_COLOR;
}
public void select() {
setBgColor(selectedBg);
setFgColor(selectedFg);
}
public void deselect() {
setBgColor(unselectedBg);
setFgColor(unselectedFg);
}
}