1 package org.columba.chat.ui.presence; 19 20 import java.awt.BorderLayout ; 21 import java.awt.Component ; 22 import java.awt.event.ItemEvent ; 23 import java.awt.event.ItemListener ; 24 25 import javax.swing.BorderFactory ; 26 import javax.swing.ImageIcon ; 27 import javax.swing.JComboBox ; 28 import javax.swing.JComponent ; 29 import javax.swing.JLabel ; 30 import javax.swing.JList ; 31 import javax.swing.JPanel ; 32 import javax.swing.ListCellRenderer ; 33 import javax.swing.UIManager ; 34 35 import org.columba.api.statusbar.IStatusBarExtension; 36 import org.columba.chat.MainInterface; 37 import org.columba.chat.command.ChangePresenceCommand; 38 import org.columba.chat.command.ChatCommandReference; 39 import org.columba.chat.conn.api.ConnectionChangedEvent; 40 import org.columba.chat.conn.api.IConnectionChangedListener; 41 import org.columba.chat.conn.api.IConnection.STATUS; 42 import org.columba.chat.resourceloader.ResourceLoader; 43 import org.columba.chat.ui.frame.api.IChatFrameMediator; 44 import org.columba.chat.ui.presence.api.IPresenceController; 45 import org.columba.core.command.CommandProcessor; 46 import org.jivesoftware.smack.packet.Presence; 47 48 52 public class PresenceComboBox extends JPanel implements ItemListener , 53 IPresenceController, IStatusBarExtension, IConnectionChangedListener { 54 55 private JLabel label; 56 57 private JComboBox comboBox; 58 59 private ImageIcon available = ResourceLoader.getMiscIcon("online.png"); 60 61 private ImageIcon extendedaway = ResourceLoader 62 .getMiscIcon("extended_away.png"); 63 64 private ImageIcon away = ResourceLoader.getMiscIcon("away.png"); 65 66 private ImageIcon busy = ResourceLoader.getMiscIcon("unavailable.png"); 67 68 private ImageIcon offline = ResourceLoader.getMiscIcon("offline.png"); 69 70 private IChatFrameMediator mediator; 71 72 public PresenceComboBox(IChatFrameMediator mediator) { 73 super(); 74 75 this.mediator = mediator; 76 77 setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); 78 79 setBackground(UIManager.getColor("Tree.background")); 80 81 comboBox = new JComboBox (); 82 comboBox.addItem("Available"); 84 comboBox.addItem("Busy"); 85 comboBox.addItem("Away"); 86 comboBox.addItem("Extended Aways"); 87 90 comboBox.setRenderer(new ItemRenderer()); 91 92 label = new JLabel (); 93 label.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2)); 94 label.setIcon(offline); 95 96 setLayout(new BorderLayout ()); 97 98 add(label, BorderLayout.WEST); 99 100 add(comboBox, BorderLayout.CENTER); 101 102 comboBox.addItemListener(this); 103 104 setEnabled(false); 105 comboBox.setEnabled(false); 106 label.setEnabled(false); 107 108 MainInterface.connection.addConnectionChangedListener(this); 109 } 110 111 118 public void addItemListener(ItemListener l) { 119 comboBox.addItemListener(l); 120 } 121 122 125 public void itemStateChanged(ItemEvent e) { 126 Object source = e.getItemSelectable(); 127 128 int index = ((JComboBox ) source).getSelectedIndex(); 129 130 Presence p = null; 131 switch (index) { 132 case 0: { 133 label.setIcon(available); 134 p = new Presence(Presence.Type.AVAILABLE); 135 p.setStatus("Available"); 136 CommandProcessor.getInstance().addOp( 137 new ChangePresenceCommand(mediator, 138 new ChatCommandReference(p))); 139 break; 140 } 141 case 1: { 142 label.setIcon(busy); 143 p = new Presence(Presence.Type.UNAVAILABLE); 144 p.setStatus("Busy"); 145 CommandProcessor.getInstance().addOp( 146 new ChangePresenceCommand(mediator, 147 new ChatCommandReference(p))); 148 149 break; 150 } 151 case 2: { 152 label.setIcon(away); 153 p = new Presence(Presence.Type.UNAVAILABLE); 154 p.setStatus("Away"); 155 CommandProcessor.getInstance().addOp( 156 new ChangePresenceCommand(mediator, 157 new ChatCommandReference(p))); 158 159 break; 160 } 161 case 3: { 162 label.setIcon(extendedaway); 163 p = new Presence(Presence.Type.UNAVAILABLE); 164 p.setStatus("Extended Away"); 165 CommandProcessor.getInstance().addOp( 166 new ChangePresenceCommand(mediator, 167 new ChatCommandReference(p))); 168 169 break; 170 } 171 } 172 173 } 174 175 public JComponent getView() { 176 return this; 177 } 178 179 public class ItemRenderer extends JLabel implements ListCellRenderer { 180 181 public ItemRenderer() { 182 185 } 186 187 188 public Component getListCellRendererComponent(JList list, Object value, 189 int index, boolean isSelected, boolean cellHasFocus) { 190 191 setText((String ) value); 192 193 return this; 194 } 195 } 196 197 200 public void connectionChanged(ConnectionChangedEvent object) { 201 STATUS status = object.getStatus(); 203 204 if (status == STATUS.ONLINE) { 205 setEnabled(true); 206 comboBox.setEnabled(true); 207 label.setEnabled(true); 208 } else if (status == STATUS.OFFLINE) { 209 setEnabled(false); 210 comboBox.setEnabled(false); 211 label.setEnabled(false); 212 213 } 214 } 215 } 216 | Popular Tags |