KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > lucane > applications > todolist > gui > MainFrame


1 /*
2  * Lucane - a collaborative platform
3  * Copyright (C) 2004 Jonathan Riboux <jonathan.riboux@wanadoo.Fr>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  */

19
20 package org.lucane.applications.todolist.gui;
21
22 import java.awt.BorderLayout JavaDoc;
23 import java.awt.Dimension JavaDoc;
24 import java.awt.event.ActionEvent JavaDoc;
25 import java.awt.event.ActionListener JavaDoc;
26 import java.awt.event.MouseAdapter JavaDoc;
27 import java.awt.event.MouseEvent JavaDoc;
28 import java.util.ArrayList JavaDoc;
29 import java.util.HashMap JavaDoc;
30 import java.util.Iterator JavaDoc;
31
32 import javax.swing.JButton JavaDoc;
33 import javax.swing.JLabel JavaDoc;
34 import javax.swing.JPanel JavaDoc;
35 import javax.swing.JScrollPane JavaDoc;
36 import javax.swing.JSplitPane JavaDoc;
37 import javax.swing.JToolBar JavaDoc;
38 import javax.swing.event.ListSelectionEvent JavaDoc;
39 import javax.swing.event.ListSelectionListener JavaDoc;
40
41 import org.lucane.applications.todolist.Todolist;
42 import org.lucane.applications.todolist.TodolistItem;
43 import org.lucane.applications.todolist.TodolistPlugin;
44 import org.lucane.applications.todolist.io.IO;
45 import org.lucane.client.Client;
46 import org.lucane.client.acl.AclEditor;
47 import org.lucane.client.widgets.DialogBox;
48 import org.lucane.client.widgets.HTMLEditor;
49 import org.lucane.client.widgets.ManagedWindow;
50
51 public class MainFrame extends ManagedWindow {
52     private JToolBar JavaDoc jtbToolBar;
53
54     private TodolistTable jtTodolists;
55     private JSplitPane JavaDoc jspList;
56     private HTMLEditor htmledListComment;
57     private JPanel JavaDoc jpListView;
58
59     private TodolistItemTable jtTodolistItems;
60     private JSplitPane JavaDoc jspItem;
61     private HTMLEditor htmledListItemComment;
62     private JPanel JavaDoc jpItemView;
63     
64     private JSplitPane JavaDoc jspMain;
65
66     private JButton JavaDoc jbCreateTodolist;
67     private JButton JavaDoc jbEditTodolist;
68     private JButton JavaDoc jbEditAcl;
69     private JButton JavaDoc jbDeleteTodolist;
70     private JButton JavaDoc jbCreateItem;
71     private JButton JavaDoc jbEditItem;
72     private JButton JavaDoc jbDeleteItem;
73     
74     private MainFrame mainFrame;
75
76     private TodolistPlugin plugin;
77     
78     public MainFrame(TodolistPlugin plugin) {
79         super(plugin, plugin.tr("MainInterface.title"));
80         this.setExitPluginOnClose(true);
81         this.plugin=plugin;
82         this.setName("MainFrame");
83         mainFrame=this;
84         TodolistItemTableModel.setColumnsNames(new String JavaDoc[] {
85                 plugin.tr("MainInterface.items.name"),
86                 plugin.tr("MainInterface.items.priority"),
87                 plugin.tr("MainInterface.items.complete"),
88                 plugin.tr("MainInterface.items.estimatedStart"),
89                 plugin.tr("MainInterface.items.estimatedEnd"),
90                 plugin.tr("MainInterface.items.start"),
91                 plugin.tr("MainInterface.items.end") });
92         TodolistTableModel.setColumnsNames(new String JavaDoc[] {
93                 plugin.tr("MainInterface.lists.name") });
94         HashMap JavaDoc tmphm = new HashMap JavaDoc();
95         tmphm.put("view_all", plugin.tr("MainInterface.lists.view_all"));
96         TodolistRenderer.setFiltersNames(tmphm);
97         TodolistItem.setPriorityLabels(new String JavaDoc[] {
98                 plugin.tr("TodoListItem.priority.low"),
99                 plugin.tr("TodoListItem.priority.medium"),
100                 plugin.tr("TodoListItem.priority.high") });
101         TodolistItem.setCompleteLabels(new String JavaDoc[] {
102                 plugin.tr("TodoListItem.complete.false"),
103                 plugin.tr("TodoListItem.complete.true") });
104         init();
105     }
106     
107     private void init(){
108         setPreferredSize(new Dimension JavaDoc(780,560));
109         
110         jtTodolists = new TodolistTable();
111         jtTodolists.addListSelectionListener(new ListSelectionListener JavaDoc() {
112             public void valueChanged(ListSelectionEvent JavaDoc lse) {
113                 refreshListToolbar();
114                 refreshTodolistItems();
115             }
116         });
117         jtTodolists.addMouseListener(new MouseAdapter JavaDoc() {
118             public void mouseClicked(MouseEvent JavaDoc e) {
119                 int row = jtTodolists.rowAtPoint(e.getPoint());
120                 if(e.getClickCount()==2 && row>=0) {
121                     Object JavaDoc obj = ((TodolistTableModel)jtTodolists.getModel()).getValueAt(row);
122                     if (obj instanceof Todolist) {
123                         Todolist tl = (Todolist)obj;
124                         if (tl==null) {
125                             htmledListComment.clear();
126                         } else if(!tl.isReadOnly()){
127                             new TodolistDialog(plugin, mainFrame, tl).show();
128                         }
129                     }
130                 }
131             }
132         });
133         
134         htmledListComment = new HTMLEditor();
135         htmledListComment.setEditable(false);
136         htmledListComment.setToolbarVisible(false);
137         jpListView = new JPanel JavaDoc(new BorderLayout JavaDoc());
138         jpListView.add(new JLabel JavaDoc(plugin.tr("MainInterface.comment")), BorderLayout.NORTH);
139         jpListView.add(htmledListComment, BorderLayout.CENTER);
140         jspList = new JSplitPane JavaDoc(JSplitPane.VERTICAL_SPLIT, new JScrollPane JavaDoc(jtTodolists), jpListView);
141         jspList.setResizeWeight(.60);
142         jspList.setName("jspList");
143
144         jtTodolistItems = new TodolistItemTable();
145
146         jtTodolistItems.addListSelectionListener(new ListSelectionListener JavaDoc() {
147             public void valueChanged(ListSelectionEvent JavaDoc lse) {
148                 TodolistItem tli = jtTodolistItems.getSelectedTodolistItem();
149                 refreshItemToolbar();
150                 if (tli!=null) {
151                     htmledListItemComment.setText(tli.getComment());
152                 } else {
153                     htmledListItemComment.clear();
154                 }
155             }
156         });
157
158         jtTodolistItems.addMouseListener(new MouseAdapter JavaDoc() {
159             public void mouseClicked(MouseEvent JavaDoc e) {
160                 int row = jtTodolistItems.rowAtPoint(e.getPoint());
161                 if(e.getClickCount()==2 && row>=0) {
162                     TodolistItem tli = (TodolistItem)((TodolistItemTableModel)jtTodolistItems.getModel()).getValueAt(row);
163                     if (tli!=null) {
164                         Object JavaDoc obj = jtTodolists.getSelectedTodolist();
165                         if (obj instanceof Todolist) {
166                             Todolist tl = (Todolist)obj;
167                             if(tl != null && !tl.isReadOnly()){
168                                 new TodolistItemDialog(plugin, mainFrame, tli).show();
169                             }
170                         }
171                     } else {
172                         htmledListItemComment.clear();
173                     }
174                 }
175             }
176         });
177
178         jpItemView = new JPanel JavaDoc();
179         jpItemView.setLayout(new BorderLayout JavaDoc());
180         jpItemView.add(new JLabel JavaDoc(plugin.tr("MainInterface.comment")), BorderLayout.NORTH);
181         htmledListItemComment = new HTMLEditor();
182         htmledListItemComment.setEditable(false);
183         htmledListItemComment.setToolbarVisible(false);
184         jpItemView.add(htmledListItemComment, BorderLayout.CENTER);
185
186         jspItem = new JSplitPane JavaDoc(JSplitPane.VERTICAL_SPLIT, new JScrollPane JavaDoc(jtTodolistItems), jpItemView);
187         jspItem.setResizeWeight(.60);
188         jspItem.setName("jspItem");
189
190         jspMain = new JSplitPane JavaDoc(JSplitPane.HORIZONTAL_SPLIT, jspList, jspItem);
191         jspMain.setResizeWeight(.20);
192         jspMain.setName("jspMain");
193         getContentPane().setLayout(new BorderLayout JavaDoc());
194         getContentPane().add(jspMain, BorderLayout.CENTER);
195
196         jtbToolBar = new JToolBar JavaDoc();
197
198         jbCreateTodolist = new JButton JavaDoc();
199         jbCreateTodolist.setToolTipText(plugin.tr("MainInterface.createList"));
200         jbCreateTodolist.setIcon(plugin.getImageIcon("create_list.png"));
201
202         jbDeleteTodolist = new JButton JavaDoc();
203         jbDeleteTodolist.setToolTipText(plugin.tr("MainInterface.deleteList"));
204         jbDeleteTodolist.setIcon(plugin.getImageIcon("delete_list.png"));
205
206         jbEditTodolist = new JButton JavaDoc();
207         jbEditTodolist.setToolTipText(plugin.tr("MainInterface.editList"));
208         jbEditTodolist.setIcon(plugin.getImageIcon("edit_list.png"));
209
210         jbEditAcl = new JButton JavaDoc();
211         jbEditAcl.setToolTipText(plugin.tr("MainInterface.editAcl"));
212         jbEditAcl.setIcon(plugin.getImageIcon("edit_acl.png"));
213
214         jbCreateItem = new JButton JavaDoc();
215         jbCreateItem.setToolTipText(plugin.tr("MainInterface.createItem"));
216         jbCreateItem.setIcon(plugin.getImageIcon("create_item.png"));
217
218         jbDeleteItem = new JButton JavaDoc();
219         jbDeleteItem.setToolTipText(plugin.tr("MainInterface.deleteItem"));
220         jbDeleteItem.setIcon(plugin.getImageIcon("delete_item.png"));
221
222         jbEditItem = new JButton JavaDoc();
223         jbEditItem.setToolTipText(plugin.tr("MainInterface.editItem"));
224         jbEditItem.setIcon(plugin.getImageIcon("edit_item.png"));
225
226         jbCreateTodolist.addActionListener(new ActionListener JavaDoc() {
227             public void actionPerformed(ActionEvent JavaDoc ae) {
228                 // I use the mainFrame object because in that case this is the action listener
229
new TodolistDialog(plugin, mainFrame).show();
230             }
231         });
232         jtbToolBar.add(jbCreateTodolist);
233         
234         jbDeleteTodolist.addActionListener(new ActionListener JavaDoc() {
235             public void actionPerformed(ActionEvent JavaDoc ae) {
236                 Object JavaDoc obj = jtTodolists.getSelectedTodolist();
237                 if (obj instanceof Todolist) {
238                     Todolist tl = (Todolist)obj;
239                     if (tl!=null) {
240                         if (DialogBox.question(plugin.tr("MainInterface.confirmDeleteListDialog.title"), plugin.tr("MainInterface.confirmDeleteListDialog.question")))
241                             mainFrame.deleteTodolist(tl);
242                     }
243                 }
244             }
245         });
246         jtbToolBar.add(jbDeleteTodolist);
247
248         jbEditTodolist.addActionListener(new ActionListener JavaDoc() {
249             public void actionPerformed(ActionEvent JavaDoc ae) {
250                 // I use the mainFrame object because in that case this is the action listener
251
Object JavaDoc obj = jtTodolists.getSelectedTodolist();
252                 if (obj instanceof Todolist) {
253                     Todolist tl = (Todolist)obj;
254                     if (tl!=null) {
255                         new TodolistDialog(plugin, mainFrame, tl).show();
256                     }
257                 }
258             }
259         });
260         jtbToolBar.add(jbEditTodolist);
261         
262         jbEditAcl.addActionListener(new ActionListener JavaDoc() {
263             public void actionPerformed(ActionEvent JavaDoc ae) {
264                 Object JavaDoc obj = jtTodolists.getSelectedTodolist();
265                 if (obj instanceof Todolist) {
266                     Todolist tl = (Todolist)obj;
267                     if (tl!=null) {
268                         IO io = IO.getInstance(plugin);
269                         try {
270                             new AclEditor(plugin, io, String.valueOf(tl.getId())).show();
271                         } catch (Exception JavaDoc e) {
272                             DialogBox.error(plugin.tr("err.unableToEditAcl"));
273                             e.printStackTrace();
274                         }
275                     }
276                 }
277             }
278         });
279         jtbToolBar.add(jbEditAcl);
280         
281         jtbToolBar.add(new JToolBar.Separator JavaDoc());
282         
283         jbCreateItem.addActionListener(new ActionListener JavaDoc() {
284             public void actionPerformed(ActionEvent JavaDoc ae) {
285                 // I use the mainFrame object because in that case 'this' is the action listener
286
Object JavaDoc obj = jtTodolists.getSelectedTodolist();
287                 if (obj instanceof Todolist) {
288                     Todolist tl = (Todolist)obj;
289                     if (tl!=null) {
290                         new TodolistItemDialog(plugin, mainFrame, tl.getId()).show();
291                     }
292                 }
293             }
294         });
295         jtbToolBar.add(jbCreateItem);
296         
297         jbDeleteItem.addActionListener(new ActionListener JavaDoc() {
298             public void actionPerformed(ActionEvent JavaDoc ae) {
299                 TodolistItem tli = jtTodolistItems.getSelectedTodolistItem();
300                 if (tli!=null) {
301                     if (DialogBox.question(plugin.tr("MainInterface.confirmDeleteItemDialog.title"), plugin.tr("MainInterface.confirmDeleteItemDialog.question")))
302                         mainFrame.deleteTodolistItem(tli);
303                 }
304             }
305         });
306         jtbToolBar.add(jbDeleteItem);
307         
308         jbEditItem.addActionListener(new ActionListener JavaDoc() {
309             public void actionPerformed(ActionEvent JavaDoc ae) {
310                 // I use the mainFrame object because in that case this is the
311
// action listener
312
TodolistItem tli = (TodolistItem)jtTodolistItems.getSelectedTodolistItem();
313                 if (tli!=null) {
314                     new TodolistItemDialog(plugin, mainFrame, tli).show();
315                 } else {
316                     htmledListItemComment.clear();
317                 }
318             }
319         });
320         jtbToolBar.add(jbEditItem);
321         getContentPane().add(jtbToolBar, BorderLayout.NORTH);
322         
323         manageWidget(jspMain);
324         manageWidget(jspItem);
325         manageWidget(jspList);
326         
327         refreshListToolbar();
328         refreshTodolists();
329     }
330     
331     private void refreshTodolists() {
332         ArrayList JavaDoc todolists = IO.getInstance(plugin).getTodolists();
333         jtTodolists.clear();
334         Iterator JavaDoc it = todolists.iterator();
335         while (it.hasNext())
336             jtTodolists.add((Todolist)it.next());
337         jtTodolists.add("view_all");
338     }
339
340     private void refreshTodolistItems() {
341         Object JavaDoc obj = jtTodolists.getSelectedTodolist();
342         if (obj instanceof Todolist) {
343             Todolist tl = (Todolist)obj;
344             if (tl!=null) {
345                 htmledListComment.setText(tl.getComment());
346     
347                 ArrayList JavaDoc todolistItems = IO.getInstance(plugin).getTodolistItems(tl.getId());
348                 jtTodolistItems.clear();
349                 Iterator JavaDoc it = todolistItems.iterator();
350                 while (it.hasNext())
351                     jtTodolistItems.add((TodolistItem)it.next());
352             }
353             else {
354                 htmledListComment.clear();
355                 jtTodolistItems.clear();
356             }
357         } else if (obj instanceof String JavaDoc) {
358             if (obj.equals("view_all")) {
359                 htmledListComment.setText("");
360                 ArrayList JavaDoc todolistItems = IO.getInstance(plugin).getTodolistItems(((TodolistTableModel)jtTodolists.getModel()).getValues());
361                 jtTodolistItems.clear();
362                 Iterator JavaDoc it = todolistItems.iterator();
363                 while (it.hasNext())
364                     jtTodolistItems.add((TodolistItem)it.next());
365             }
366         }
367     }
368     
369     protected void addTodolist(Todolist newTodolist) {
370         int id = IO.getInstance(plugin).addTodolist(newTodolist);
371         if (id<0)
372             return;
373         newTodolist.setId(id);
374         jtTodolists.add(newTodolist);
375     }
376
377     protected void modifyTodolist(Todolist oldTodolist, Todolist newTodolist) {
378         if (!IO.getInstance(plugin).modifyTodolist(oldTodolist, newTodolist))
379             return;
380         jtTodolists.remove(oldTodolist);
381         jtTodolists.add(newTodolist);
382     }
383
384     protected void deleteTodolist(Todolist defunctTodolist) {
385         if (!IO.getInstance(plugin).deleteTodolist(defunctTodolist))
386             return;
387         jtTodolists.remove(defunctTodolist);
388     }
389
390     protected void addTodolistItem(TodolistItem newTodolistItem) {
391         int id = IO.getInstance(plugin).addTodolistItem(newTodolistItem);
392         if (id<0)
393             return;
394         newTodolistItem.setId(id);
395         jtTodolistItems.add(newTodolistItem);
396     }
397
398     protected void modifyTodolistItem(TodolistItem oldTodolistItem, TodolistItem newTodolistItem) {
399         if (!IO.getInstance(plugin).modifyTodolistItem(oldTodolistItem, newTodolistItem))
400             return;
401         jtTodolistItems.remove(oldTodolistItem);
402         jtTodolistItems.add(newTodolistItem);
403     }
404
405     protected void deleteTodolistItem(TodolistItem defunctTodolistItem) {
406         if (!IO.getInstance(plugin).deleteTodolistItem(defunctTodolistItem))
407             return;
408         jtTodolistItems.remove(defunctTodolistItem);
409     }
410     
411     private void refreshListToolbar()
412     {
413         Object JavaDoc obj = jtTodolists.getSelectedTodolist();
414         if (obj instanceof Todolist) {
415             Todolist tl = (Todolist)obj;
416             boolean writeable = (tl != null && !tl.isReadOnly());
417             boolean owner = (writeable && tl.getUserName().equals(Client.getInstance().getMyInfos().getName()));
418             jbEditTodolist.setEnabled(owner);
419             jbDeleteTodolist.setEnabled(owner);
420             jbEditAcl.setEnabled(owner);
421             jbCreateItem.setEnabled(writeable);
422         } else {
423             jbEditTodolist.setEnabled(false);
424             jbDeleteTodolist.setEnabled(false);
425             jbEditAcl.setEnabled(false);
426             jbCreateItem.setEnabled(false);
427         }
428         refreshItemToolbar();
429     }
430     
431     private void refreshItemToolbar()
432     {
433         TodolistItem tli = (TodolistItem)jtTodolistItems.getSelectedTodolistItem();
434         if (tli!=null) {
435             jbEditItem.setEnabled(jbCreateItem.isEnabled());
436             jbDeleteItem.setEnabled(jbCreateItem.isEnabled());
437         } else {
438             jbEditItem.setEnabled(false);
439             jbDeleteItem.setEnabled(false);
440         }
441     }
442 }
443
Popular Tags