001: package org.lucane.applications.jmail.base;
002:
003: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
004: * This file is part of JMail *
005: * Copyright (C) 2002-2003 Yvan Norsa <norsay@wanadoo.fr> *
006: * *
007: * JMail is free software; you can redistribute it and/or modify *
008: * it under the terms of the GNU General Public License as published by *
009: * the Free Software Foundation; either version 2 of the License, or *
010: * any later version. *
011: * *
012: * JMail is distributed in the hope that it will be useful, *
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of *
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
015: * GNU General Public License for more details. *
016: * *
017: * You should have received a copy of the GNU General Public License along *
018: * with JMail; if not, write to the Free Software Foundation, Inc., *
019: * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
020: * *
021: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
022:
023: import java.awt.*;
024: import java.awt.event.*;
025: import java.util.*;
026: import javax.mail.*;
027: import javax.swing.*;
028:
029: import org.lucane.applications.jmail.JMailPlugin;
030: import org.lucane.client.widgets.ManagedWindow;
031:
032: /** Main window */
033: public class JMailWindow extends ManagedWindow {
034: /** Language resource */
035: private ResourceBundle msgBundle;
036:
037: private JMenuBar menuBar;
038:
039: /** "File" menu */
040: private JMenu fileMenu;
041:
042: /** "New" sub-menu */
043: private JMenu newMenu;
044:
045: /** "Mail" menu item */
046: private JMenuItem newMsgMenuItem;
047:
048: /** "Folder" menu item */
049: private JMenuItem newFolderMenuItem;
050:
051: /** "Open..." menu item */
052: private JMenuItem openMenuItem;
053:
054: private JMenuItem saveMenuItem;
055:
056: private JMenu folderMenu;
057: private JMenuItem folderNewMenuItem;
058: private JMenuItem folderDeleteMenuItem;
059:
060: private JMenuItem printMenuItem;
061:
062: /** "Exit" menu item */
063: private JMenuItem exitMenuItem;
064:
065: /** "Edit" menu */
066: private JMenu editMenu;
067:
068: /** "Move in folder..." menu item */
069: private JMenuItem moveMenuItem;
070:
071: /** "Copy in folder..." menu item */
072: private JMenuItem copyMenuItem;
073:
074: /** "Delete" menu item */
075: private JMenuItem deleteMenuItem;
076:
077: /** "Mail" menu */
078: private JMenu messageMenu;
079:
080: /** "New mail" menu item */
081: private JMenuItem newMsgMenuItem2;
082:
083: /** "Reply..." menu item */
084: private JMenuItem replyMenuItem;
085:
086: /** "Reply all..." menu item */
087: private JMenuItem replyallMenuItem;
088:
089: /** "Forward..." menu item */
090: private JMenuItem forwardMenuItem;
091:
092: private MainPanel panel;
093:
094: /** User profile */
095: private Profile profile;
096:
097: private JMailWindowListener listener;
098:
099: private JMailPlugin plugin;
100:
101: /**
102: * Constructor
103: *
104: * @param plugin the plugin
105: */
106: public JMailWindow(JMailPlugin plugin) {
107: super (plugin, plugin.getTitle());
108: this .plugin = plugin;
109:
110: this .msgBundle = plugin.getBundle();
111: this .profile = plugin.getProfile();
112:
113: init();
114: if (profile.getType().compareTo("pop3") == 0)
115: setFolderMenuItemsEnabled(false);
116:
117: setPanel();
118:
119: addWindowListener(listener);
120: setPreferredSize(new Dimension(800, 600));
121: show();
122:
123: if (profile.getType().compareTo("pop3") != 0) {
124: FolderListener f = new FolderListener(profile, panel);
125: f.start();
126: }
127: }
128:
129: /** Initialisation of menus */
130: private void init() {
131: listener = new JMailWindowListener();
132:
133: /** Init menus */
134: menuBar = new JMenuBar();
135:
136: fileMenu = new JMenu(msgBundle.getString("common.fileMenu"));
137: fileMenu.setMnemonic('F');
138:
139: newMenu = new JMenu(msgBundle
140: .getString("JMailWindow.newMenuLabel"));
141: newMenu.setMnemonic('N');
142: fileMenu.add(newMenu);
143:
144: newMsgMenuItem = newMenu
145: .add(msgBundle.getString("common.mail"));
146: newMsgMenuItem.setAccelerator(KeyStroke.getKeyStroke('N',
147: Event.CTRL_MASK));
148: newMsgMenuItem.addActionListener(listener);
149:
150: newMenu.addSeparator();
151:
152: newFolderMenuItem = newMenu.add(msgBundle
153: .getString("common.folder"));
154: newFolderMenuItem.setMnemonic('R');
155: newFolderMenuItem.addActionListener(listener);
156:
157: openMenuItem = fileMenu.add(msgBundle.getString("common.open"));
158: openMenuItem.setAccelerator(KeyStroke.getKeyStroke('O',
159: Event.CTRL_MASK));
160: openMenuItem.setMnemonic('O');
161: openMenuItem.setEnabled(false);
162: openMenuItem.addActionListener(listener);
163:
164: saveMenuItem = fileMenu.add(msgBundle.getString("common.save"));
165: saveMenuItem.setAccelerator(KeyStroke.getKeyStroke('S',
166: Event.CTRL_MASK));
167: saveMenuItem.setMnemonic('E');
168: saveMenuItem.setEnabled(false);
169: saveMenuItem.addActionListener(listener);
170:
171: fileMenu.addSeparator();
172:
173: folderMenu = new JMenu(msgBundle.getString("common.folder"));
174: folderMenu.setMnemonic('D');
175: fileMenu.add(folderMenu);
176:
177: folderNewMenuItem = folderMenu.add(msgBundle
178: .getString("common.new"));
179: folderNewMenuItem.addActionListener(listener);
180:
181: folderDeleteMenuItem = folderMenu.add(msgBundle
182: .getString("common.delete"));
183: folderDeleteMenuItem.setEnabled(false);
184: folderDeleteMenuItem.addActionListener(listener);
185:
186: fileMenu.addSeparator();
187:
188: printMenuItem = fileMenu.add(msgBundle
189: .getString("common.print"));
190: printMenuItem.setAccelerator(KeyStroke.getKeyStroke('P',
191: Event.CTRL_MASK));
192: printMenuItem.setMnemonic('I');
193: printMenuItem.setEnabled(false);
194: printMenuItem.addActionListener(listener);
195:
196: fileMenu.addSeparator();
197:
198: exitMenuItem = fileMenu.add(msgBundle
199: .getString("JMailWindow.exitMenuItemLabel"));
200: exitMenuItem.setAccelerator(KeyStroke.getKeyStroke('Q',
201: Event.CTRL_MASK));
202: exitMenuItem.setMnemonic('Q');
203: exitMenuItem.addActionListener(listener);
204:
205: fileMenu = menuBar.add(fileMenu);
206:
207: editMenu = new JMenu(msgBundle
208: .getString("JMailWindow.editMenuLabel"));
209: editMenu.setMnemonic('E');
210:
211: moveMenuItem = editMenu.add(msgBundle
212: .getString("JMailWindow.moveMenuItemLabel"));
213: moveMenuItem.setAccelerator(KeyStroke.getKeyStroke('V',
214: Event.CTRL_MASK + Event.SHIFT_MASK));
215: moveMenuItem.setMnemonic('D');
216: moveMenuItem.setEnabled(false);
217: moveMenuItem.addActionListener(listener);
218:
219: copyMenuItem = editMenu.add(msgBundle
220: .getString("JMailWindow.copyMenuItemLabel"));
221: copyMenuItem.setMnemonic('C');
222: copyMenuItem.setEnabled(false);
223: copyMenuItem.addActionListener(listener);
224:
225: editMenu.addSeparator();
226:
227: deleteMenuItem = editMenu.add(msgBundle
228: .getString("common.delete"));
229: deleteMenuItem.setMnemonic('E');
230: deleteMenuItem.setEnabled(false);
231: deleteMenuItem.addActionListener(listener);
232:
233: editMenu = menuBar.add(editMenu);
234:
235: messageMenu = new JMenu(msgBundle.getString("common.mail"));
236: messageMenu.setMnemonic('M');
237:
238: newMsgMenuItem2 = messageMenu.add(msgBundle
239: .getString("JMailWindow.newMsgMenuItem2Label"));
240: newMsgMenuItem2.setAccelerator(KeyStroke.getKeyStroke('N',
241: Event.CTRL_MASK));
242: newMsgMenuItem2.setMnemonic('N');
243: newMsgMenuItem2.addActionListener(listener);
244:
245: messageMenu.addSeparator();
246:
247: replyMenuItem = messageMenu.add(msgBundle
248: .getString("common.reply"));
249: replyMenuItem.setAccelerator(KeyStroke.getKeyStroke('R',
250: Event.CTRL_MASK));
251: replyMenuItem.setMnemonic('R');
252: replyMenuItem.setEnabled(false);
253: replyMenuItem.addActionListener(listener);
254:
255: replyallMenuItem = messageMenu.add(msgBundle
256: .getString("common.replyAll"));
257: replyallMenuItem.setAccelerator(KeyStroke.getKeyStroke('R',
258: Event.CTRL_MASK + Event.SHIFT_MASK));
259: replyallMenuItem.setMnemonic('t');
260: replyallMenuItem.setEnabled(false);
261: replyallMenuItem.addActionListener(listener);
262:
263: forwardMenuItem = messageMenu.add(msgBundle
264: .getString("JMailWindow.forwardMenuItemLabel"));
265: forwardMenuItem.setAccelerator(KeyStroke.getKeyStroke('F',
266: Event.CTRL_MASK));
267: forwardMenuItem.setMnemonic('f');
268: forwardMenuItem.setEnabled(false);
269: forwardMenuItem.addActionListener(listener);
270:
271: messageMenu = menuBar.add(messageMenu);
272:
273: setJMenuBar(menuBar);
274: }
275:
276: /**
277: * Enable or disable menu items related to a mail
278: *
279: * @param b
280: * activate or deactivate
281: */
282: protected final void setMenuItemsEnabled(boolean b) {
283: openMenuItem.setEnabled(b);
284: saveMenuItem.setEnabled(b);
285: //moveMenuItem.setEnabled(b);
286: //copyMenuItem.setEnabled(b);
287: deleteMenuItem.setEnabled(b);
288: replyMenuItem.setEnabled(b);
289: replyallMenuItem.setEnabled(b);
290: forwardMenuItem.setEnabled(b);
291: }
292:
293: /**
294: * Enable or disable menu items related to folder
295: *
296: * @param b
297: * activate or deactivate
298: */
299: protected final void setFolderMenuItemsEnabled(boolean b) {
300: folderMenu.setEnabled(b);
301: newFolderMenuItem.setEnabled(b);
302: folderNewMenuItem.setEnabled(b);
303: folderDeleteMenuItem.setEnabled(b);
304: moveMenuItem.setEnabled(b);
305: copyMenuItem.setEnabled(b);
306: }
307:
308: /** Properly disconnect and exit */
309: private void exit() {
310: panel.disconnect();
311:
312: this .dispose();
313: plugin.exit();
314: }
315:
316: /** Updates everything */
317: private void update() {
318: panel.disconnect();
319: setPanel();
320: SwingUtilities.updateComponentTreeUI(getContentPane());
321: }
322:
323: /** Reloads the main panel */
324: private void setPanel() {
325: panel = new MainPanel(plugin, this , profile, msgBundle);
326: setContentPane(panel);
327: }
328:
329: /** Listener for this class */
330: private final class JMailWindowListener extends WindowAdapter
331: implements ActionListener {
332: /**
333: * Method called when the windows is closed
334: *
335: * @param e
336: * triggered event
337: */
338: public final void windowClosing(WindowEvent e) {
339: exit();
340: }
341:
342: /**
343: * This method is invoked when an event is triggered
344: *
345: * @param e
346: * event
347: */
348: public final void actionPerformed(ActionEvent e) {
349: JMenuItem i = (JMenuItem) e.getSource();
350:
351: if (i == newMsgMenuItem || i == newMsgMenuItem2) {
352: SendMessageDialog sm = new SendMessageDialog(plugin,
353: profile, msgBundle);
354: sm.dispose();
355: } else if (i == newFolderMenuItem || i == folderNewMenuItem)
356: panel.newFolder();
357:
358: else if (i == folderDeleteMenuItem)
359: panel.deleteFolder();
360:
361: else if (i == openMenuItem) {
362: Message currentMessage = panel.getCurrent();
363:
364: new ReadMessageFrame(plugin, panel.getStore(), panel
365: .getCurrentFolder(), panel, profile,
366: currentMessage, panel.getMailContent(
367: currentMessage).toString(), msgBundle,
368: panel.isAttachmentVisible());
369: } else if (i == saveMenuItem)
370: panel.save();
371:
372: else if (i == printMenuItem) {
373: /** TODO : do printing stuff */
374: } else if (i == exitMenuItem)
375: exit();
376:
377: else if (i == moveMenuItem)
378: panel.moveMsg();
379:
380: else if (i == copyMenuItem)
381: panel.copyMsg();
382:
383: else if (i == deleteMenuItem)
384: panel.delete();
385:
386: else if (i == replyMenuItem)
387: panel.reply();
388:
389: else if (i == replyallMenuItem)
390: panel.replyall();
391:
392: else if (i == forwardMenuItem)
393: panel.forward();
394:
395: }
396: }
397: }
|