package eu.jucy.gui.texteditor;
import helpers.PreferenceChangedAdapter;
import java.util.List;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import uc.IHub;
import uc.IUser;
import uihelpers.SUIJob;
import eu.jucy.gui.GUIPI;
import eu.jucy.gui.texteditor.StyledTextViewer.Message;
import eu.jucy.gui.texteditor.StyledTextViewer.TextReplacement;
public class NickColourerTextModificator implements ITextModificator {
public static final String ID = "eu.jucy.gui.nickcolouring";
private static Color ownNickCol;
private static Font ownNickFont;
private static Color opNickCol;
private static Font opNickFont;
private static Color favNickCol;
private static Font favNickFont;
private static Color normalNickCol;
private static Font normalNickFont;
private static boolean active;
private static boolean colourJoinParts;
static {
loadFontsAndColours();
new PreferenceChangedAdapter(GUIPI.get(),
GUIPI.ownNickCol,GUIPI.ownNickFont,GUIPI.opNickCol,GUIPI.normalNickCol,
GUIPI.opNickFont,GUIPI.favNickCol,GUIPI.favNickFont,GUIPI.normalNickFont,
GUIPI.IDForTextModificatorEnablement(ID),GUIPI.colourJoinParts ) {
@Override
public void preferenceChanged(String preference, String oldValue,
String newValue) {
new SUIJob() {
@Override
public void run() {
loadFontsAndColours();
}
}.scheduleIfNotRunning(500,getClass());
}
};
}
private static void loadFontsAndColours() {
ownNickCol = GUIPI.getColor(GUIPI.ownNickCol);
opNickCol = GUIPI.getColor(GUIPI.opNickCol);
favNickCol = GUIPI.getColor(GUIPI.favNickCol);
normalNickCol = GUIPI.getColor(GUIPI.normalNickCol);
ownNickFont = GUIPI.getFont(GUIPI.ownNickFont);
opNickFont = GUIPI.getFont(GUIPI.opNickFont);
favNickFont = GUIPI.getFont(GUIPI.favNickFont);
normalNickFont = GUIPI.getFont(GUIPI.normalNickFont);
active = GUIPI.getBoolean(GUIPI.IDForTextModificatorEnablement(ID));
colourJoinParts = GUIPI.getBoolean(GUIPI.colourJoinParts);
}
public NickColourerTextModificator() {
}
//
//
// public void getStyleRange(String message, int startpos, Message original,
// List<StyleRange> ranges, List<ObjectPoint<Image>> images) {
// IUser usr = original.getUsr();
// if (usr != null) {
// int nickstart = message.indexOf('<')+1+startpos;
// int length = usr.getNick().length();
// StyleRange sr = null;
// if (usr.getHub().getSelf().equals(usr)) {
// sr = getStyleRange(ownNickCol,ownNickFont,nickstart,length);
// } else if (usr.isFavUser()) {
// sr = getStyleRange(favNickCol,favNickFont,nickstart,length);
// } else if (usr.isOp()) {
// sr = getStyleRange(opNickCol,opNickFont,nickstart,length);
// } else {
// sr = getStyleRange(normalNickCol,normalNickFont,nickstart,length);
// }
// if (sr != null) {
// ranges.add(sr);
// }
// int currentpos = message.indexOf('>')+1;
// String ownNick = usr.getHub().getSelf().getNick();
// while (-1 != (currentpos = message.indexOf(ownNick, currentpos)) ) {
// StyleRange sr2 = getStyleRange(ownNickCol,ownNickFont,currentpos+startpos,ownNick.length());
// ranges.add(sr2);
// currentpos+= ownNick.length();
// }
// }
// }
/**
* for usercolumn to find out if nickcolouring is active
*
* @return
*/
public static boolean isActive() {
return active;
}
public static Color getColor(IUser usr) {
if (usr.getHub().getSelf().equals(usr)) {
return ownNickCol;
} else if (usr.isFavUser()) {
return favNickCol;
} else if (usr.isOp()) {
return opNickCol;
} else {
return normalNickCol;
}
}
public static Font getFont(IUser usr) {
if (usr.getHub().getSelf().equals(usr)) {
return ownNickFont;
} else if (usr.isFavUser()) {
return favNickFont;
} else if (usr.isOp()) {
return opNickFont;
} else {
return normalNickFont;
}
}
private StyleRange getStyleRange(Color col, Font font, int nickstart,int length) {
StyleRange sr = new StyleRange();
sr.font = font;
sr.foreground = col;
sr.start = nickstart;
sr.length = length;
return sr;
}
public void dispose() {}
public void init(StyledText st,StyledTextViewer viewer, IHub hub) {}
public void getMessageModifications(Message original, boolean pm,List<TextReplacement> replacement) {
String message = original.getMessage();
IUser usr = original.getUsr();
if (usr != null && (colourJoinParts || original.type != MessageType.JOINPART)) {
int nickstart = message.indexOf(usr.getNick());
int length = usr.getNick().length();
if (nickstart != -1) {
replacement.add(new TextReplacement(nickstart, length, usr.getNick()) {
@Override
public void addStyle(List<StyleRange> ranges, int addPosition,Message message) {
super.addStyle(ranges, addPosition,message);
int nickstart = addPosition;
int length = this.lengthToReplace;
StyleRange sr;
IUser usr = message.getUsr();
if ( usr.getHub().getSelf().equals(usr)) {
sr = getStyleRange(ownNickCol,ownNickFont,nickstart,length);
} else if (usr.isFavUser()) {
sr = getStyleRange(favNickCol,favNickFont,nickstart,length);
} else if (usr.isOp()) {
sr = getStyleRange(opNickCol,opNickFont,nickstart,length);
} else {
sr = getStyleRange(normalNickCol,normalNickFont,nickstart,length);
}
ranges.add(sr);
}
});
}
int currentpos = nickstart+length;
String ownNick = usr.getHub().getSelf().getNick();
while (-1 != (currentpos = message.indexOf(ownNick, currentpos)) ) {
replacement.add(new TextReplacement(currentpos, ownNick.length(), ownNick) {
@Override
public void addStyle(List<StyleRange> ranges, int addPosition,Message message) {
super.addStyle(ranges, addPosition,message);
StyleRange sr2 = getStyleRange(ownNickCol,ownNickFont,addPosition,this.lengthToReplace);
ranges.add(sr2);
}
});
currentpos += ownNick.length();
}
}
}
}