KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > chat > ui > presence > PresenceComboBox


1 // The contents of this file are subject to the Mozilla Public License Version
2
// 1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
// Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18
package org.columba.chat.ui.presence;
19
20 import java.awt.BorderLayout JavaDoc;
21 import java.awt.Component JavaDoc;
22 import java.awt.event.ItemEvent JavaDoc;
23 import java.awt.event.ItemListener JavaDoc;
24
25 import javax.swing.BorderFactory JavaDoc;
26 import javax.swing.ImageIcon JavaDoc;
27 import javax.swing.JComboBox JavaDoc;
28 import javax.swing.JComponent JavaDoc;
29 import javax.swing.JLabel JavaDoc;
30 import javax.swing.JList JavaDoc;
31 import javax.swing.JPanel JavaDoc;
32 import javax.swing.ListCellRenderer JavaDoc;
33 import javax.swing.UIManager JavaDoc;
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 /**
49  * @author fdietz
50  *
51  */

52 public class PresenceComboBox extends JPanel JavaDoc implements ItemListener JavaDoc,
53         IPresenceController, IStatusBarExtension, IConnectionChangedListener {
54
55     private JLabel JavaDoc label;
56
57     private JComboBox JavaDoc comboBox;
58
59     private ImageIcon JavaDoc available = ResourceLoader.getMiscIcon("online.png");
60
61     private ImageIcon JavaDoc extendedaway = ResourceLoader
62             .getMiscIcon("extended_away.png");
63
64     private ImageIcon JavaDoc away = ResourceLoader.getMiscIcon("away.png");
65
66     private ImageIcon JavaDoc busy = ResourceLoader.getMiscIcon("unavailable.png");
67
68     private ImageIcon JavaDoc 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 JavaDoc();
82         // comboBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
83
comboBox.addItem("Available");
84         comboBox.addItem("Busy");
85         comboBox.addItem("Away");
86         comboBox.addItem("Extended Aways");
87         // checkBox.addItem("Custom Message...", null);
88
// checkBox.addItem("Leave...");
89

90         comboBox.setRenderer(new ItemRenderer());
91
92         label = new JLabel JavaDoc();
93         label.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2));
94         label.setIcon(offline);
95
96         setLayout(new BorderLayout JavaDoc());
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     // private void addStatus(String tooltip, ImageIcon icon) {
112
// JLabel label = new JLabel(icon);
113
// label.setToolTipText(tooltip);
114
//
115
// comboBox.addItem(tooltip);
116
// }
117

118     public void addItemListener(ItemListener JavaDoc l) {
119         comboBox.addItemListener(l);
120     }
121
122     /**
123      * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
124      */

125     public void itemStateChanged(ItemEvent JavaDoc e) {
126         Object JavaDoc source = e.getItemSelectable();
127
128         int index = ((JComboBox JavaDoc) 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 JavaDoc getView() {
176         return this;
177     }
178
179     public class ItemRenderer extends JLabel JavaDoc implements ListCellRenderer JavaDoc {
180
181         public ItemRenderer() {
182             /*
183              * setIconTextGap(5); setVerticalAlignment(JLabel.CENTER);
184              */

185         }
186
187         /** {@inheritDoc} */
188         public Component JavaDoc getListCellRendererComponent(JList JavaDoc list, Object JavaDoc value,
189                 int index, boolean isSelected, boolean cellHasFocus) {
190
191             setText((String JavaDoc) value);
192
193             return this;
194         }
195     }
196
197     /**
198      * @see org.columba.chat.conn.api.IConnectionChangedListener#connectionChanged(org.columba.chat.conn.api.ConnectionChangedEvent)
199      */

200     public void connectionChanged(ConnectionChangedEvent object) {
201         // IAccount account = object.getAccount();
202
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