package org.chartsy.chatsy.chat.ui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.Font; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; import org.chartsy.chatsy.chat.util.FontLoader; import org.jivesoftware.smack.XMPPException; import org.chartsy.chatsy.chat.ChatsyManager; import org.chartsy.chatsy.chat.ui.conferences.ConferenceUtils; import org.openide.util.ImageUtilities; /** * * @author Viorel */ public class ConferenceItem extends JPanel { private String conferenceName; private String conferenceJID; private int occupants = 0; private JLabel nameLabel; private boolean mouseOver = false; private boolean focused = false; public ConferenceItem(String name, String jid) { super(new BorderLayout()); setOpaque(true); setBackground(Color.WHITE); setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); setFocusable(true); setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); this.conferenceName = name; this.conferenceJID = jid; try { this.occupants = ConferenceUtils.getNumberOfOccupants(conferenceJID); } catch (XMPPException ex) { } nameLabel = new JLabel(conferenceName); nameLabel.setOpaque(false); nameLabel.setHorizontalAlignment(JLabel.LEFT); nameLabel.setVerticalAlignment(JLabel.CENTER); nameLabel.setFont(FontLoader.getDroidFont(Font.PLAIN, 13)); nameLabel.setForeground(Color.decode("0x111111")); nameLabel.setIcon(ImageUtilities.loadImageIcon("org/chartsy/chatsy/resources/conference.png", true)); nameLabel.setIconTextGap(10); add(nameLabel, BorderLayout.CENTER); addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { requestFocus(); if (e.getClickCount() == 2) joinRoom(conferenceJID, conferenceName); } public void mouseEntered(MouseEvent e) { mouseOver = true; repaint(); } public void mouseExited(MouseEvent e) { mouseOver = false; repaint(); } }); addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { focused = true; repaint(); } public void focusLost(FocusEvent e) { focused = false; repaint(); } }); } private void joinRoom(String roomJID, String roomDescription) { ChatRoom chatRoom = ChatsyManager.getChatManager().getChatContainer().getChatRoom(roomJID); if (chatRoom == null) ConferenceUtils.joinConferenceOnSeperateThread(roomDescription, roomJID, null); } public String getConferenceName() { return conferenceName; } public String getConferenceJID() { return conferenceJID; } protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D graphics2D = (Graphics2D) g; graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics2D.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); graphics2D.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); if (mouseOver && !focused) { Color color = Color.decode("0x0298db"); Color bgColor = new Color(color.getRed(), color.getGreen(), color.getBlue(), 100); graphics2D.setColor(bgColor); graphics2D.fill(new Rectangle(0, 0, getWidth(), getHeight()-1)); } if (focused) { Color color = Color.decode("0x0298db"); Color bgColor = new Color(color.getRed(), color.getGreen(), color.getBlue(), 200); graphics2D.setColor(bgColor); graphics2D.fill(new Rectangle(0, 0, getWidth(), getHeight()-1)); } GradientPaint gradientPaint; gradientPaint = new GradientPaint(0, getHeight()-1, Color.decode("0xefefef"), getWidth()/2, getHeight()-1, Color.decode("0xadaaad")); graphics2D.setPaint(gradientPaint); graphics2D.drawLine(0, getHeight()-1, getWidth()/2, getHeight()-1); gradientPaint = new GradientPaint(getWidth()/2, getHeight()-1, Color.decode("0xadaaad"), getWidth(), getHeight()-1, Color.decode("0xefefef")); graphics2D.setPaint(gradientPaint); graphics2D.drawLine(getWidth()/2, getHeight()-1, getWidth(), getHeight()-1); } }