package eu.jucy.gui; import helpers.GH; import helpers.SizeEnum; import java.net.InetAddress; import java.text.Collator; import java.text.SimpleDateFormat; import java.util.Comparator; import java.util.Date; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.ui.plugin.AbstractUIPlugin; import uc.IHasUser; import uc.IHub; import uc.IUser; import uihelpers.TableViewerAdministrator.ColumnDescriptor; /** * Holds all columns for Users * * @author Quicksilver * */ public abstract class UserColumns extends ColumnDescriptor<IUser> { protected UserColumns(int defaultColumnSize, String columnName, int style) { super(defaultColumnSize, columnName, style); } public static class NameUserCol<X extends IHasUser> extends ColumnDescriptor<X> { public static <T extends IHasUser> ColumnDescriptor<T> get() { return new NameUserCol<T>(); } public NameUserCol() { super(150, Lang.User); } @Override public String getText(X x) { return x.getUser().getNick(); } @Override public Image getImage(X x) { return Nick.getUserImage(x.getUser(),false); } } public static class Nick extends UserColumns { // private static final Image NORM_ACTIVE; // private static final Image NORM_PASSIVE; // private static final Image NORM_OFFLINE; // // private static final Image OP_ACTIVE; // private static final Image OP_PASSIVE; // private static final Image OP_OFFLINE; private static final Image[] USERIMAGES = new Image[12]; static { Image norm = AbstractUIPlugin.imageDescriptorFromPlugin( Application.PLUGIN_ID, IImageKeys.USER_ACTIVE2).createImage(); Image passive = AbstractUIPlugin.imageDescriptorFromPlugin( Application.PLUGIN_ID, IImageKeys.USER_PASSIVE2).createImage(); Image offline = new Image(null,norm,SWT.IMAGE_GRAY);//AbstractUIPlugin.imageDescriptorFromPlugin( //Application.PLUGIN_ID, IImageKeys.USER_OFFLINE2).createImage(); Image key = AbstractUIPlugin.imageDescriptorFromPlugin( Application.PLUGIN_ID, IImageKeys.USER_OPKEY2).createImage(); for (int i = 0; i < USERIMAGES.length;i++) { Image baseImage = i % 3 == 0? norm: (i% 3 == 1?passive:offline); Image keyUsed = i%6 < 3 ?null:key; int size =i<6?16:22; Image cop = copyWithKey(baseImage,keyUsed, size); USERIMAGES[i] = cop; } norm.dispose(); passive.dispose(); offline.dispose(); key.dispose(); } public static Image copyWithKey(Image original,Image addOn,int scale) { ImageData id; Rectangle r = original.getBounds(); Image normCop = new Image(null,scale,scale); GC gc = new GC(normCop); gc.setAdvanced(true); gc.setInterpolation(SWT.HIGH); gc.setAntialias(SWT.ON); gc.drawImage(original, 0, 0,r.width,r.height,0,0,scale,scale); if (addOn != null) { gc.drawImage(addOn, 0 , 0,r.width,r.height,0,0,scale,scale); } gc.dispose(); id = normCop.getImageData(); id = id.scaledTo(scale, scale); id.transparentPixel = id.palette.getPixel(new RGB(255,255,255)); normCop.dispose(); return new Image(original.getDevice(),id); } public Nick() { super(100,Lang.Nick,SWT.LEAD); } @Override public Comparator<IUser> getComparator() { return new Comparator<IUser>(){ private final Collator mine =Collator.getInstance(); public int compare(IUser a, IUser b) { if (a.isOp() ^ b.isOp() ){ return a.isOp()? -1 : 1 ; } return mine.compare(a.getNick() , b.getNick()); } }; } public static Image getUserImage(boolean large,boolean online,boolean active,boolean op) { int i = large?6:0; i += (op?3:0); i += (online? (active?0:1) :2) ; return USERIMAGES[i]; } public static Image getUserImage(IUser usr,boolean large) { int i = large?6:0; i += (usr.isOp()?3:0); i += (usr.isOnline()? (usr.isTCPActive()?0:1) :2) ; return USERIMAGES[i]; // if (usr.isOnline()) { // if (usr.getModechar() == Mode.ACTIVE) { // if (usr.isOp()) { // return OP_ACTIVE; // } else { // return NORM_ACTIVE; // } // } else { // if (usr.isOp()) { // return OP_PASSIVE; // } else { // return NORM_PASSIVE; // } // } // } else { // if (usr.isOp()) { // return OP_OFFLINE; // } else { // return NORM_OFFLINE; // } // } } @Override public Image getImage(IUser cur) { return getUserImage(cur,false); } @Override public String getText(IUser x) { return x.getNick(); } @Override public Color getForeground(IUser x) { return super.getForeground(x); } } public static class Shared extends UserColumns { public Shared() { super(70,Lang.Shared,SWT.TRAIL); } @Override public Comparator<IUser> getComparator() { return new Comparator<IUser>(){ public int compare(IUser a, IUser b) { return Long.valueOf(a.getShared()).compareTo(b.getShared()); } }; } @Override public String getText(IUser usr) { return SizeEnum.getReadableSize(usr.getShared()); } } public static class Description extends UserColumns { public Description() { super(70,Lang.Description, SWT.LEAD); } @Override public Comparator<IUser> getComparator() { return new Comparator<IUser>(){ private final Collator mine = Collator.getInstance(); public int compare(IUser a, IUser b){ return mine.compare(a.getDescription() , b.getDescription()); } }; } @Override public String getText(IUser x) { return x.getDescription(); } } public static class Tag extends UserColumns { public Tag() { super(90,Lang.Tag,SWT.LEAD); } @Override public String getText(IUser x) { return x.getTag(); } } public static class Connection extends UserColumns { public Connection() { super(50,Lang.Connection,SWT.LEAD); } @Override public String getText(IUser x) { return x.getConnection(); } @Override public Comparator<IUser> getComparator() { return new Comparator<IUser>() { public int compare(IUser o1, IUser o2) { return GH.compareTo(o1.getUs(),o2.getUs()) ; } }; } } public static class Email extends UserColumns { public Email() { super(50,Lang.EMail,SWT.LEAD); } @Override public String getText(IUser usr) { return usr.getEMail(); } } public static class HubName extends UserColumns { public HubName() { super(80,Lang.Hub, SWT.LEAD); } @Override public String getText(IUser x) { IHub hub = x.getHub(); return hub == null? "": hub.getName(); } } public static class IPColumn extends UserColumns { public IPColumn() { super(100, Lang.IP, SWT.LEAD); } @Override public String getText(IUser x) { InetAddress a = x.getIp(); return a == null? "": a.getHostAddress(); } } public static class LastSeen extends UserColumns { private final SimpleDateFormat sdf = new SimpleDateFormat(); public LastSeen() { super(80,Lang.TimeLastSeen,SWT.LEAD); } @Override public String getText(IUser usr) { if (usr.isOnline()) { return Lang.Online; } else { if (usr.getLastseen() != 0) { return sdf.format(new Date(usr.getLastseen())); } else { return ""; } } } @Override public Comparator<IUser> getComparator() { return new Comparator<IUser>() { public int compare(IUser o1, IUser o2) { int i= Boolean.valueOf(o1.isOnline()).compareTo(o2.isOnline()); if (i != 0) { return i; } else { return Long.valueOf(o1.getLastseen()).compareTo(o2.getLastseen()); } } }; } } /* public static class IsFavUser extends UserColumns { public IsFavUser() { super(60, Lang.IsFavoriteUser,SWT.LEAD); } @Override public String getText(IUser usr) { return (usr.isFavUser() ? Lang.Yes : Lang.No ); } } */ public static class SlotUntil extends UserColumns { public SlotUntil() { super(60,Lang.HasExtraSlotUntil,SWT.LEAD); } @Override public Comparator<IUser> getComparator() { return new Comparator<IUser>() { public int compare(IUser o1, IUser o2) { return Long.valueOf(o1.getAutograntSlot()).compareTo(o2.getAutograntSlot()); } }; } @Override public String getText(IUser usr) { if (usr.hasCurrentlyAutogrant()) { if (usr.getAutograntSlot() == IUser.UNTILFOREVER) { return SizeEnum.INF; } else { SimpleDateFormat format; if (usr.getAutograntSlot() < System.currentTimeMillis() + 12L*3600L*1000L) { format = new SimpleDateFormat("HH:mm:ss"); } else { format = new SimpleDateFormat("HH:mm EEE, d MMM yyyy"); } return format.format(new Date(usr.getAutograntSlot())); } } else { return Lang.No; } } } }