Package sc

Source Code of sc.Member

package sc;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;

public class Member extends BasePanel
{
  private static final long serialVersionUID = 1L;
  private static Map<String, Member> membersByName = new HashMap<String, Member>();
  private static Map<String, Member> membersByID = new HashMap<String, Member>();
 
  private final static Color topleft_offline;
  private final static Color bottomright_offline;
  private final static Color topleft_online;
  private final static Color bottomright_online;
  private final static Color online_name;
 
  private final static Font nameFont;

  private final static JPopupMenu popupMenu;
  private static String popupMenuMemberId;
 
  private final static Image companionscross;
  private final static Image starofallegiance;
  private final static Image platinumhammer;
  private final static Image ventrilo;
  private final static Image inchat;
  private final static Image offline;
  private final static Image selectImage;
 
  private static int sortBy = 0;
  private static Member userMember;

  private String name;
  private String member_id;
  private boolean inVent;
  private boolean onForum;
  private boolean inChat;
  private String race;
  private boolean sex;
  private String ip;
  private boolean isUser;
  private String rank;
  private String ventpass;
  private String venttime;
  private String ventping;
  private String award;
  private Image avatar;
  private Image ranklogo;
  private boolean selected;

  static
  {
    topleft_offline = new Color(0.6f, 0.6f, 0.6f);
    bottomright_offline = new Color(0.5f, 0.5f, 0.5f);
    topleft_online = new Color(1f, 0.1f, 0.1f);
    bottomright_online = new Color(0.9f, 0.9f, 0.5f);
    nameFont = new Font("SansSerif", Font.PLAIN, 16);
    online_name = new Color(1f, 1f, 1f);
   
    companionscross = Images.getImage("/images/companionscross.png");
    starofallegiance = Images.getImage("/images/starofallegiance.png");
    platinumhammer = Images.getImage("/images/platinumhammer.png");
    ventrilo = Images.getImage("/images/ventrilo.png");
    inchat = Images.getImage("/images/inchat.png");
    offline = Images.getImage("/images/offline.png");
    selectImage = Images.getImage("/images/selected.png");
   
    ActionListener menuListener = new ActionListener() {
      public void actionPerformed(ActionEvent e)
      {
        String cmd = e.getActionCommand();
        if (cmd == "Profile")
          OpenURL.openProfile(Member.popupMenuMemberId);
        else if (cmd == "Info")
        {
        }
        else if (cmd == "Send Message")
          SendMessage.open(Member.userMember.member_id, Member.popupMenuMemberId);
      }
    };
   
    JPopupMenu.setDefaultLightWeightPopupEnabled(false);
    popupMenu = new JPopupMenu("Menu");
        Icon icon = new ImageIcon(Images.getImage("/images/profile.png"));
    JMenuItem item = new JMenuItem("Profile", icon);
    item.addActionListener(menuListener);
    popupMenu.add(item);
    icon = new ImageIcon(SendMessage.icon);
    item = new JMenuItem("Send Message", icon);
    item.addActionListener(menuListener);
    popupMenu.add(item);
  }

  public static Member getMemberByName(String name, boolean create)
  {
    // Fuzzy match member names to fix problem with Vent names being slightly
    // different to forum names
    String namelc = name.toLowerCase();
    for (String key : membersByName.keySet())
    {
      String keylc = key.toLowerCase();
      int len = 5;
      if (keylc.length() < len) len = keylc.length();
      if (namelc.length() < len) len = namelc.length();
      if (keylc.startsWith(namelc.substring(0, len))
        || keylc.endsWith(namelc.substring(name.length()-len)))
      {
        return membersByName.get(key);
      }
    }
    if (create == true)
      membersByName.put(name, new Member(name));
    else
      return null;
    return membersByName.get(name);
  }

  public static Member getMemberByID(String id)
  {
    return membersByID.get(id);
  }

  public static Collection<Member> getAllMembers()
  {
    return membersByName.values();
  }

  public Member(String name)
  {
    this.name = name;
    setPreferredSize(new Dimension(100, 20));
    add(popupMenu);
    award = "";
    avatar = null;
    ranklogo = null;
    selected = false;
  }

  public void sortByName()
  {
    if (online())
      sortValue("0" + name);
    else
      sortValue("6" + name);
    sortBy = 0;
  }

  public void sortByChat()
  {
    if (online())
      if (inChat())
        sortValue("00" + name);
      else
        sortValue("01" + name);
    else
      sortValue("6" + name);
    sortBy = 1;
  }

  public void sortByVent()
  {
    if (online())
      if (inVent())
        sortValue("00" + name);
      else
        sortValue("01" + name);
    else
      sortValue("6" + name);
    sortBy = 2;
  }

  public void sortByRank()
  {
    sortValue("0" + name);
    if (this.rank.equals("Member"))
      sortValue("1" + name);
    else if (this.rank.equals("Unknown"))
      sortValue("6" + name);
    sortBy = 3;
  }

  public void updateSortValue()
  {
    if (sortBy == 0)
      sortByName();
    else if (sortBy == 1)
      sortByChat();
    else if (sortBy == 2)
      sortByVent();
    else if (sortBy == 3)
      sortByRank();
  }

  public boolean inVent(boolean inVent)
  {
    if (!Information.firstUpdate)
    {
      if (Configuration.notifyVentArrivals() && this.inVent == false
          && inVent == true)
        Tray.event(this.name + " entered vent");
      else if (Configuration.notifyVentExits() && this.inVent == true
          && inVent == false)
        Tray.event(this.name + " left vent");
    }
    this.inVent = inVent;
    updateSortValue();
    return this.inVent;
  }

  public boolean inVent()
  {
    return this.inVent;
  }

  public boolean onForum(boolean onForum)
  {
    if (!Information.firstUpdate)
    {
      if (Configuration.notifyForumArrivals() && this.onForum == false
          && onForum == true)
        Tray.event(this.name + " entered forums");
      else if (Configuration.notifyForumExits() && this.onForum == true
          && onForum == false)
        Tray.event(this.name + " left forums");
    }
    this.onForum = onForum;
    updateSortValue();
    return this.onForum;
  }

  public boolean onForum()
  {
    return this.onForum;
  }

  public boolean inChat(boolean inChat)
  {
    if (!Information.firstUpdate)
    {
      if (Configuration.notifyChatArrivals() && this.inChat == false
          && inChat == true)
        Tray.event(this.name + " entered chat");
      else if (Configuration.notifyChatExits() && this.inChat == true
          && inChat == false)
        Tray.event(this.name + " left chat");
    }
    this.inChat = inChat;
    updateSortValue();
    return this.inChat;
  }

  public boolean inChat()
  {
    return this.inChat;
  }

  public boolean online()
  {
    return this.inVent || this.onForum || this.inChat;
  }

  public void setMemberId(String member_id)
  {
    if (membersByID.containsKey(this.member_id))
      membersByID.remove(this.member_id);
    this.member_id = member_id;
    membersByID.put(member_id, this);

  }

  public String getMemberId()
  {
    return this.member_id;
  }

  public String getName()
  {
    return this.name;
  }

  public String getAvatarPath()
  {
    if (race.equals("Human"))
    {
      if (sex)
        return "/images/human_male.png";
      return "/images/human_female.png";
    }
    if (race.equals("Dwarf"))
    {
      if (sex)
        return "/images/dwarf_male.png";
      return "/images/dwarf_female.png";
    }
    if (race.equals("Mirdain"))
    {
      if (sex)
        return "/images/mirdain_male.png";
      return "/images/mirdain_female.png";
    }
    if (race.equals("Alfar"))
      return "/images/alfar_male.png";
    if (race.equals("Ork"))
      return "/images/ork_male.png";

    return "/images/unknown.png";
  }

  public void setRace(String race)
  {
    if (race.equals("H"))
      this.race = "Human";
    else if (race.equals("D"))
      this.race = "Dwarf";
    else if (race.equals("M"))
      this.race = "Mirdain";
    else if (race.equals("A"))
      this.race = "Alfar";
    else if (race.equals("O"))
      this.race = "Ork";
    else
      this.race = "Unknown";
   
    this.avatar = Images.getImage(getAvatarPath());
  }

  public void setSex(String sex)
  {
    this.sex = sex.equals("M");
    this.avatar = Images.getImage(getAvatarPath());
  }

  public void setIP(String ip)
  {
    this.ip = ip;
  }

  public String getIP()
  {
    return ip;
  }

  public void setRank(String rank)
  {
    this.ranklogo = Images.getImage("/images/lords.png");
    if (rank.equals("Go"))
      this.rank = "Governer General";
    else if (rank.equals("Ge"))
      this.rank = "General";
    else if (rank.equals("Ch"))
      this.rank = "Chancellor";
    else if (rank.equals("Tr"))
      this.rank = "Trade Lord";
    else if (rank.equals("Sq"))
      this.rank = "Squad Leader";
    else if (rank.equals("Se"))
      this.rank = "Senator";
    else if (rank.equals("Me"))
    {
      this.rank = "Member";
      this.ranklogo = Images.getImage("/images/harlequin.png");
    }
    else {
      this.rank = "Unknown";
      this.ranklogo = null;
    }
  }

  public void setVentPass(String ventpass)
  {
    this.ventpass = ventpass;
    OpenURL.setVentCredentials(name, ventpass);
  }

  public String getVentPass()
  {
    return ventpass;
  }

  public void isUser(boolean isuser)
  {
    this.isUser = isuser;
   
    if (isuser)
    {
      TopPanel.enableOpenForum(true);   
      TopPanel.enableJoinChat(true);
      TopPanel.enableJoinVent(true);
      Tray.enableOpenForum(true);   
      Tray.enableJoinChat(true);
      Tray.enableJoinVent(true);
      Member.userMember = this;
    }
  }
 
  public boolean isUser()
  {
    return isUser;
  }

  public void setAward(String award)
  {
    if (award.equals("1"))
      this.award = "The Companion's Cross";
    else if (award.equals("2"))
      this.award = "Star of Allegiance";
    else if (award.equals("3"))
      this.award = "The Platinum Hammer";
  }
 
  public static Member userMember()
  {
    return Member.userMember;
  }

  public void mouseEntered(MouseEvent e)
  {
    super.mouseEntered(e);
    selected = true;
    repaint();
  }

  public void mouseExited(MouseEvent e)
  {
    super.mouseExited(e);
    selected = false;
    repaint();
  }
 
  public void mousePressed(MouseEvent e)
  {
    super.mousePressed(e);
    Member.popupMenuMemberId = member_id;
    popupMenu.show(this, e.getX() - 5, e.getY() + 2);
  }

  public void mouseMoved(MouseEvent e)
  {
    super.mouseMoved(e);
   
    int w = getWidth();
    int x = e.getX();
   
    if (x < 30)
      setToolTipText(race);
    else if (!award.equals("") && x > w - 80 && x < w - 60)
      setToolTipText(award);
    else if (inVent() && x > w - 60 && x < w - 40)
      setToolTipText("Ping: " + ventping + ", Connected: " + venttime);
    else if (inChat() && x > w - 40 && x < w - 20)
      setToolTipText("In Chat");
    else if (x > w - 20 && !(this.rank.equals("Member") || this.rank.equals("Unknown")))
      setToolTipText(rank);
    else
      setToolTipText(null);
  }
 
  public static void hidePopupMenu()
  {
    Member.popupMenu.setVisible(false);
    Member.popupMenuMemberId = null;
  }
 
  @Override
  protected void paintComponent(Graphics g)
  {
    int w = getWidth();
    int h = getHeight();
    GradientPaint gp;
    width(w);

    // Gradient fill panel
    if (online())
      gp = new GradientPaint(50, 0, topleft_online, 140, h,
          bottomright_online);
    else
      gp = new GradientPaint(130, 0, topleft_offline, 140, h,
          bottomright_offline);

    ((Graphics2D) g).setPaint(gp);
    g.fillRect(0, 0, w, h);

    g.setColor(bottomright_offline);
    g.drawLine(0, h - 1, w, h - 1);
   
    if ((selected || Member.popupMenuMemberId == member_id) && selectImage != null)
    {
      for (int x = 0; x < w; x += 30)
        g.drawImage(selectImage, x, -3, this);
    }

    // Avatar
    if (avatar != null)
      g.drawImage(avatar, 0, -3, this);
    if (!online())
      g.drawImage(offline, 0, -3, this);

    // Members name
    g.setFont(nameFont);
   
    if (online())
    {
      g.setColor(Color.BLACK);
      g.drawString(getName(), 35, 16);
    }
    g.setColor(online_name);
    g.drawString(getName(), 34, 15);
   
    if (award.equals("The Companion's Cross") && companionscross != null)
      g.drawImage(companionscross, w - 80, 1, this);
    else if (award.equals("Star of Allegiance") && starofallegiance != null)
      g.drawImage(starofallegiance, w - 80, 1, this);
    else if (award.equals("The Platinum Hammer") && platinumhammer != null)
      g.drawImage(platinumhammer, w - 80, 1, this);

    // Status icons
    if (online())
    {
      if (inVent() && ventrilo != null)
        g.drawImage(ventrilo, w - 60, 1, this);
      if (inChat() && inchat != null)
        g.drawImage(inchat, w - 401, this);
    }

    if (ranklogo != null)
      g.drawImage(ranklogo, w - 200, this);
   
    if (!online() && !selected && offline != null)
    {
      for (int x = 30; x < w; x += 30)
        g.drawImage(offline, x, -3, this);
    }
     
  }

  public void ventInfo(String time, String ping)
  {
    this.venttime = time;
    this.ventping = ping;
  }
}
TOP

Related Classes of sc.Member

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.