KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > lucane > applications > forum > gui > MainWindow


1 /*
2  * Lucane - a collaborative platform
3  * Copyright (C) 2004 Vincent Fiack <vfiack@mail15.com>
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 package org.lucane.applications.forum.gui;
20
21 import java.awt.BorderLayout JavaDoc;
22 import java.awt.Dimension JavaDoc;
23 import java.awt.GridBagConstraints JavaDoc;
24 import java.awt.GridBagLayout JavaDoc;
25 import java.awt.GridLayout JavaDoc;
26 import java.util.ArrayList JavaDoc;
27 import java.util.Iterator JavaDoc;
28
29 import javax.swing.BorderFactory JavaDoc;
30 import javax.swing.JButton JavaDoc;
31 import javax.swing.JLabel JavaDoc;
32 import javax.swing.JPanel JavaDoc;
33 import javax.swing.JScrollPane JavaDoc;
34 import javax.swing.JSplitPane JavaDoc;
35 import javax.swing.JTree JavaDoc;
36 import javax.swing.SwingConstants JavaDoc;
37 import javax.swing.tree.DefaultMutableTreeNode JavaDoc;
38 import javax.swing.tree.DefaultTreeModel JavaDoc;
39 import javax.swing.tree.TreePath JavaDoc;
40
41 import org.lucane.applications.forum.ForumPlugin;
42 import org.lucane.applications.forum.model.ForumInfo;
43 import org.lucane.applications.forum.model.ForumMessage;
44 import org.lucane.client.util.WidgetState;
45 import org.lucane.client.widgets.HTMLEditor;
46 import org.lucane.client.widgets.ManagedWindow;
47
48 public class MainWindow
49 {
50     private ForumPlugin plugin;
51     
52     private JSplitPane JavaDoc splitForumList;
53     private JSplitPane JavaDoc splitMessageView;
54     private ManagedWindow mainWindow;
55     private ForumList forums;
56     private JTree JavaDoc messages;
57     private JLabel JavaDoc author;
58     private JLabel JavaDoc date;
59     private HTMLEditor content;
60     
61     private JButton JavaDoc btnRefresh;
62     private JButton JavaDoc btnNewMessage;
63     private JButton JavaDoc btnReply;
64     private JButton JavaDoc btnEdit;
65     private JButton JavaDoc btnToggleVisible;
66         
67     public MainWindow(ForumPlugin plugin)
68     {
69         this.plugin = plugin;
70         createMainWindow(plugin);
71     }
72     
73     private void createMainWindow(ForumPlugin plugin)
74     {
75         forums = new ForumList();
76         forums.addListSelectionListener(new ForumSelectionListener(plugin, this));
77         
78         messages = new JTree JavaDoc();
79         messages.setModel(new DefaultTreeModel JavaDoc(null));
80         messages.setRootVisible(false);
81         messages.setShowsRootHandles(true);
82         messages.addTreeSelectionListener(new MessageSelectionListener(plugin, this));
83                 
84         ButtonActionListener actionListener = new ButtonActionListener(plugin, this);
85         
86         btnRefresh = new JButton JavaDoc(tr("btn.refresh"), plugin.getImageIcon("actions/refresh.png"));
87         btnRefresh.setName("mainWindow.btnRefresh");
88         btnRefresh.setHorizontalAlignment(SwingConstants.LEFT);
89         btnRefresh.addActionListener(actionListener);
90         btnRefresh.setVisible(false);
91         btnNewMessage = new JButton JavaDoc(tr("btn.newMessage"), plugin.getImageIcon("actions/new.png"));
92         btnNewMessage.setName("mainWindow.btnNewMessage");
93         btnNewMessage.setHorizontalAlignment(SwingConstants.LEFT);
94         btnNewMessage.addActionListener(actionListener);
95         btnNewMessage.setVisible(false);
96         btnReply = new JButton JavaDoc(tr("btn.reply"), plugin.getImageIcon("actions/reply.png"));
97         btnReply.setName("mainWindow.btnReply");
98         btnReply.setHorizontalAlignment(SwingConstants.LEFT);
99         btnReply.addActionListener(actionListener);
100         btnReply.setVisible(false);
101         btnEdit = new JButton JavaDoc(tr("btn.edit"), plugin.getImageIcon("actions/edit.png"));
102         btnEdit.setName("mainWindow.btnEdit");
103         btnEdit.setHorizontalAlignment(SwingConstants.LEFT);
104         btnEdit.addActionListener(actionListener);
105         btnEdit.setVisible(false);
106         btnToggleVisible = new JButton JavaDoc(tr("btn.delete"), plugin.getImageIcon("actions/delete.png"));
107         btnToggleVisible.setName("mainWindow.btnToggleVisible");
108         btnToggleVisible.setHorizontalAlignment(SwingConstants.LEFT);
109         btnToggleVisible.addActionListener(actionListener);
110         btnToggleVisible.setVisible(false);
111
112         JPanel JavaDoc panel = new JPanel JavaDoc(new BorderLayout JavaDoc());
113         JPanel JavaDoc buttons = new JPanel JavaDoc(new BorderLayout JavaDoc());
114         JPanel JavaDoc container = new JPanel JavaDoc(new GridLayout JavaDoc(5, 1));
115         container.add(btnRefresh);
116         container.add(btnNewMessage);
117         container.add(btnReply);
118         container.add(btnEdit);
119         container.add(btnToggleVisible);
120         buttons.add(container, BorderLayout.NORTH);
121         panel.add(buttons, BorderLayout.EAST);
122         panel.add(new JScrollPane JavaDoc(messages), BorderLayout.CENTER);
123         
124         splitForumList = new JSplitPane JavaDoc(JSplitPane.HORIZONTAL_SPLIT,
125                 new JScrollPane JavaDoc(forums), panel);
126         splitForumList.setName("splitForumList");
127         splitForumList.setDividerLocation(150);
128         WidgetState.restore(plugin.getLocalConfig(), splitForumList);
129
130         
131         JPanel JavaDoc messageView = createMessageView(plugin);
132         splitMessageView = new JSplitPane JavaDoc(JSplitPane.VERTICAL_SPLIT,
133                 splitForumList, messageView);
134         splitMessageView.setName("splitMessageView");
135         splitMessageView.setDividerLocation(300);
136         WidgetState.restore(plugin.getLocalConfig(), splitForumList);
137         
138         
139         mainWindow = new ManagedWindow(plugin, plugin.getTitle());
140         mainWindow.setName("mainWindow");
141         mainWindow.getContentPane().setLayout(new BorderLayout JavaDoc());
142         mainWindow.getContentPane().add(splitMessageView, BorderLayout.CENTER);
143         mainWindow.setPreferredSize(new Dimension JavaDoc(700, 550));
144         mainWindow.setExitPluginOnClose(true);
145     }
146     
147     private JPanel JavaDoc createMessageView(ForumPlugin plugin)
148     {
149         JPanel JavaDoc view = new JPanel JavaDoc(new GridBagLayout JavaDoc());
150         
151         author = new JLabel JavaDoc("");
152         date = new JLabel JavaDoc("");
153         
154         content = new HTMLEditor();
155         content.setToolbarVisible(false);
156         content.setEditable(false);
157         content.setBorder(BorderFactory.createTitledBorder(tr("lbl.message")));
158         
159         GridBagConstraints JavaDoc c = new GridBagConstraints JavaDoc();
160         c.fill = GridBagConstraints.BOTH;
161         c.gridx = 0;
162         c.gridy = 0;
163         
164         c.weighty = 0.1;
165         c.weightx = 0.9;
166         view.add(author, c);
167
168         c.weightx = 0.1;
169         c.gridx++;
170         view.add(date, c);
171         
172         c.gridx = 0;
173         c.gridy = 1;
174         c.gridwidth = 2;
175         c.weighty = 3;
176         view.add(content, c);
177         
178         return view;
179     }
180     
181     private String JavaDoc tr(String JavaDoc s)
182     {
183         return plugin.tr(s);
184     }
185     
186     public void showMessageWindow(ForumPlugin plugin, String JavaDoc forum, ForumMessage message, boolean edit)
187     {
188         MessageWindow mw = new MessageWindow(plugin, this, forum, message, edit);
189         mw.show();
190     }
191     
192     public void refreshButtons(ForumInfo forum)
193     {
194         boolean read = false;
195         boolean write = false;
196         boolean moderate = false;
197         
198         if(forum != null)
199         {
200             read = true;
201             write = forum.getAccess().equals(ForumInfo.WRITE);
202             moderate = forum.getAccess().equals(ForumInfo.MODERATE);
203         }
204         
205         boolean messageSelected = (messages.getSelectionCount() == 1);
206         btnReply.setEnabled(messageSelected);
207         btnEdit.setEnabled(messageSelected);
208         btnToggleVisible.setEnabled(messageSelected);
209         
210         //delete or undelete ?
211
if(messageSelected)
212         {
213             TreePath JavaDoc selection = messages.getSelectionPath();
214             DefaultMutableTreeNode JavaDoc node = (DefaultMutableTreeNode JavaDoc)selection.getLastPathComponent();
215             ForumMessage message = (ForumMessage)node.getUserObject();
216             if(message.isVisible())
217             {
218                 btnToggleVisible.setText(tr("btn.delete"));
219                 btnToggleVisible.setIcon(plugin.getImageIcon("actions/delete.png"));
220             }
221             else
222             {
223                 btnToggleVisible.setText(tr("btn.undelete"));
224                 btnToggleVisible.setIcon(plugin.getImageIcon("actions/undelete.png"));
225             }
226         }
227
228         btnRefresh.setVisible(read);
229         btnNewMessage.setVisible(write || moderate);
230         btnReply.setVisible(write || moderate);
231         btnEdit.setVisible(moderate);
232         btnToggleVisible.setVisible(moderate);
233     }
234     
235     public void updateMessages(ArrayList JavaDoc messages)
236     {
237         DefaultMutableTreeNode JavaDoc root = new DefaultMutableTreeNode JavaDoc();
238         updateMessages(-1, root, messages);
239         this.messages.setModel(new DefaultTreeModel JavaDoc(root));
240
241         for(int i=0;i<this.messages.getRowCount();i++)
242         {
243             this.messages.expandRow(i);
244         }
245     }
246         
247     private void updateMessages(int idMsg, DefaultMutableTreeNode JavaDoc parent, ArrayList JavaDoc messages)
248     {
249         Iterator JavaDoc i = messages.iterator();
250         while(i.hasNext())
251         {
252             ForumMessage msg = (ForumMessage)i.next();
253             
254             if(msg.getIdRef() == idMsg)
255             {
256                 DefaultMutableTreeNode JavaDoc node = new DefaultMutableTreeNode JavaDoc(msg);
257                 parent.add(node);
258                 updateMessages(msg.getId(), node, messages);
259             }
260         }
261     }
262     
263     public ManagedWindow getMainWindow()
264     {
265         return mainWindow;
266     }
267     
268     public ForumList getForumList()
269     {
270         return forums;
271     }
272     
273     public JTree JavaDoc getMessages()
274     {
275         return messages;
276     }
277     
278     public JLabel JavaDoc getMessageAuthor()
279     {
280         return author;
281     }
282     
283     public JLabel JavaDoc getMessageDate()
284     {
285         return date;
286     }
287     
288     public HTMLEditor getMessageContent()
289     {
290         return content;
291     }
292 }
Popular Tags