KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > calendar > ui > box > CalendarBox


1 package org.columba.calendar.ui.box;
2
3 import java.awt.BorderLayout JavaDoc;
4 import java.awt.Point JavaDoc;
5 import java.awt.event.ActionEvent JavaDoc;
6 import java.awt.event.ActionListener JavaDoc;
7 import java.awt.event.MouseAdapter JavaDoc;
8 import java.awt.event.MouseEvent JavaDoc;
9 import java.util.ArrayList JavaDoc;
10 import java.util.Iterator JavaDoc;
11 import java.util.List JavaDoc;
12
13 import javax.swing.BorderFactory JavaDoc;
14 import javax.swing.ImageIcon JavaDoc;
15 import javax.swing.JComponent JavaDoc;
16 import javax.swing.JLabel JavaDoc;
17 import javax.swing.JMenuItem JavaDoc;
18 import javax.swing.JOptionPane JavaDoc;
19 import javax.swing.JPanel JavaDoc;
20 import javax.swing.JPopupMenu JavaDoc;
21 import javax.swing.JScrollPane JavaDoc;
22
23 import org.columba.calendar.model.api.IComponent;
24 import org.columba.calendar.model.api.IComponentInfo;
25 import org.columba.calendar.model.api.IComponentInfoList;
26 import org.columba.calendar.model.api.IEvent;
27 import org.columba.calendar.model.api.IEventInfo;
28 import org.columba.calendar.store.CalendarStoreFactory;
29 import org.columba.calendar.store.api.ICalendarStore;
30 import org.columba.calendar.store.api.StoreException;
31 import org.columba.calendar.ui.dialog.EditEventDialog;
32 import org.columba.core.gui.base.DoubleClickListener;
33 import org.columba.core.gui.base.IconTextField;
34 import org.columba.core.gui.frame.api.IComponentBox;
35 import org.columba.core.resourceloader.IconKeys;
36 import org.columba.core.resourceloader.ImageLoader;
37
38 import com.jgoodies.forms.builder.DefaultFormBuilder;
39 import com.jgoodies.forms.layout.FormLayout;
40
41 public class CalendarBox extends JPanel JavaDoc implements IComponentBox {
42
43     private final static ImageIcon JavaDoc icon = ImageLoader
44             .getSmallIcon(IconKeys.EDIT_FIND);
45
46     private IconTextField textField;
47
48     private JLabel JavaDoc label;
49
50     private CalendarList list;
51
52     private JPopupMenu JavaDoc contextMenu;
53
54     public CalendarBox() {
55
56         setLayout(new BorderLayout JavaDoc());
57
58         label = new JLabel JavaDoc("Quick Find:");
59         label.setDisplayedMnemonic('F');
60
61         textField = new IconTextField(icon, 10);
62         label.setLabelFor(textField);
63
64         list = new CalendarList();
65         list.setModel(new FilteringModel());
66         List JavaDoc<IEventInfo> eventList = populateListModel("work");
67         list.addAll(eventList);
68
69         list.installJTextField(textField);
70
71         CalendarMenu popup = new CalendarMenu(new ActionListener JavaDoc() {
72             public void actionPerformed(ActionEvent JavaDoc event) {
73                 String JavaDoc calendarId = event.getActionCommand();
74
75                 List JavaDoc<IEventInfo> eventList = populateListModel(calendarId);
76                 list.setModel(new FilteringModel());
77                 list.addAll(eventList);
78                 list.installJTextField(textField);
79                 textField.setText(textField.getText());
80             }
81         });
82         textField.setPopupMenu(popup);
83
84         list.addMouseListener(new DoubleClickListener() {
85
86             @Override JavaDoc
87             public void doubleClick(MouseEvent JavaDoc event) {
88                 IEventInfo selected = (IEventInfo) list.getSelectedValue();
89                 openEditCalendarEventDialog(selected);
90             }
91         });
92
93
94         list.add(getPopupMenu());
95         list.addMouseListener(new MyMouseListener());
96
97         setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
98
99         JPanel JavaDoc p = new JPanel JavaDoc();
100         p.setBorder(BorderFactory.createEmptyBorder(0, 0, 4, 0));
101         FormLayout layout = new FormLayout("pref, 2dlu, fill:default:grow",
102         // 2 columns
103
"fill:default:grow");
104
105         // create a form builder
106
DefaultFormBuilder builder = new DefaultFormBuilder(layout, p);
107         builder.append(label);
108         builder.append(textField);
109         add(p, BorderLayout.NORTH);
110
111         JScrollPane JavaDoc scrollPane = new JScrollPane JavaDoc(list);
112         add(scrollPane, BorderLayout.CENTER);
113     }
114
115     private JPopupMenu JavaDoc getPopupMenu() {
116         if ( contextMenu != null) return contextMenu;
117
118         contextMenu = new JPopupMenu JavaDoc();
119
120         JMenuItem JavaDoc item = new JMenuItem JavaDoc("Open..");
121         item.addActionListener(new ActionListener JavaDoc() {
122             public void actionPerformed(ActionEvent JavaDoc event) {
123                 IEventInfo selected = (IEventInfo) list.getSelectedValue();
124                 openEditCalendarEventDialog(selected);
125             }
126         });
127
128         contextMenu.add(item);
129         return contextMenu;
130     }
131
132     private List JavaDoc<IEventInfo> populateListModel(String JavaDoc calendarId) {
133         ICalendarStore store = CalendarStoreFactory.getInstance()
134                 .getLocaleStore();
135
136         IComponentInfoList infoList = store.getComponentInfoList(calendarId);
137         List JavaDoc<IEventInfo> eventList = new ArrayList JavaDoc<IEventInfo>();
138         Iterator JavaDoc<IComponentInfo> it = infoList.iterator();
139         while (it.hasNext()) {
140             IComponentInfo info = it.next();
141             if (info.getType().equals(IComponent.TYPE.EVENT)) {
142                 eventList.add((IEventInfo) info);
143             }
144         }
145         return eventList;
146     }
147
148     public String JavaDoc getDescription() {
149         return "Calendar";
150     }
151
152     public ImageIcon JavaDoc getIcon() {
153         return ImageLoader.getSmallIcon(IconKeys.CALENDAR);
154     }
155
156     public String JavaDoc getTechnicalName() {
157         return "calendar_box";
158     }
159
160     public String JavaDoc getName() {
161         return "Calendar";
162     }
163
164     public JComponent JavaDoc getView() {
165         return this;
166     }
167
168     private void openEditCalendarEventDialog(IEventInfo selected) {
169
170         ICalendarStore store = CalendarStoreFactory.getInstance()
171                 .getLocaleStore();
172
173         // retrieve event from store
174
try {
175             IEventInfo model = (IEventInfo) store.get(selected.getId());
176
177             EditEventDialog dialog = new EditEventDialog(null, model);
178             if (dialog.success()) {
179                 IEventInfo updatedModel = dialog.getModel();
180
181                 // update store
182
store.modify(selected.getId(), updatedModel);
183             }
184
185         } catch (StoreException e1) {
186             JOptionPane.showMessageDialog(this, e1.getMessage());
187             e1.printStackTrace();
188         }
189     }
190
191     class MyMouseListener extends MouseAdapter JavaDoc {
192
193         @Override JavaDoc
194         public void mouseClicked(MouseEvent JavaDoc e) {
195             handleEvent(e);
196         }
197
198         @Override JavaDoc
199         public void mousePressed(MouseEvent JavaDoc e) {
200             handlePopupEvent(e);
201         }
202
203         @Override JavaDoc
204         public void mouseReleased(MouseEvent JavaDoc e) {
205             handlePopupEvent(e);
206         }
207
208         /**
209          * @param e
210          */

211         private void handlePopupEvent(MouseEvent JavaDoc e) {
212             Point JavaDoc p = e.getPoint();
213             if (e.isPopupTrigger()) {
214                 // check if a single entry is selected
215
if ( list.getSelectedIndices().length <= 1 ) {
216                     // select new item
217
int index = list.locationToIndex(p);
218                     list.setSelectedIndex(index);
219                 }
220                 // show context menu
221
getPopupMenu().show(e.getComponent(), p.x, p.y);
222             }
223         }
224
225         /**
226          * @param e
227          */

228         private void handleEvent(MouseEvent JavaDoc e) {
229         }
230     }
231 }
232
Popular Tags