📄 foldertreepanel.java
字号:
/*** $Id: FolderTreePanel.java,v 1.6 2001/05/07 12:37:21 kunugi Exp $**** Copyright (c) 2000-2001 Jeff Gay** on behalf of ICEMail.org <http://www.icemail.org>** Copyright (c) 1998-2000 by Timothy Gerard Endres** ** This program is free software.** ** You may redistribute it and/or modify it under the terms of the GNU** General Public License as published by the Free Software Foundation.** Version 2 of the license should be included with this distribution in** the file LICENSE, as well as License.html. If the license is not** included with this distribution, you may find a copy at the FSF web** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA.**** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR** REDISTRIBUTION OF THIS SOFTWARE. */package org.icemail.mail;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.Frame;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.mail.Folder;import javax.mail.MessagingException;import javax.mail.NoSuchProviderException;import javax.mail.Session;import javax.mail.Store;import javax.mail.URLName;import javax.swing.JDialog;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JProgressBar;import javax.swing.JScrollPane;import javax.swing.JTree;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreeModel;import javax.swing.tree.TreeNode;import javax.swing.tree.TreePath;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;import org.icemail.Package; import org.icemail.util.ComponentFactory; import org.icemail.util.UserProperties; /** * Class FolderTreePanel */public class FolderTreePanel extends JPanel implements ActionDistributor{ private static final int Debug_ = Package.DEBUG ? Package.getLevel( "FolderTreePanel" ) : 0; private static FolderTreePanel Instance_ = null; private DefaultMutableTreeNode rootNode_; private JTree tree_; private MessagePanel messagePanel_; private JPopupMenu folderPopup_; private JPopupMenu storePopup_; private ActionListener actionListener_ = new IActionListener(); /** * Default constructor, private to disable multiple instantiations. */ private FolderTreePanel() { super( true ); String nodeTitle = ICEMail.getBundle().getString( "FolderTree.title.stores" ); rootNode_ = new RootTreeNode( nodeTitle ); TreeModel xtreeModel = new DefaultTreeModel( rootNode_ ); tree_ = new JTree( xtreeModel ); folderPopup_ = ComponentFactory.getPopupMenuAndItems( ICEMail.getBundle(), "FolderTree.Folder", actionListener_ ); storePopup_ = ComponentFactory.getPopupMenuAndItems( ICEMail.getBundle(), "FolderTree.Store", actionListener_ ); tree_.addMouseListener( new IMouseAdapter() ); tree_.setCellRenderer( new FolderTreeCellRenderer() ); tree_.addTreeSelectionListener( new ITreeSelectionListener() ); JScrollPane xscrollPane = new JScrollPane(); xscrollPane.setMinimumSize( new Dimension(5, 25) ); xscrollPane.setPreferredSize( new Dimension(100, 150) ); xscrollPane.getViewport().add( tree_ ); setLayout( new BorderLayout() ); add( xscrollPane ); } /** * Get the SINGLE instance of the panel, creating it if necessary. * * @return the SINGLE instance of the panel */ public static synchronized FolderTreePanel getInstance() { if ( FolderTreePanel.Instance_ == null ) { FolderTreePanel.Instance_ = new FolderTreePanel(); } return FolderTreePanel.Instance_; } public void distribute( ActionEvent event ) { if ( Package.DEBUG && Package.isTraceable( "FolderTreePanel" ) ) { System.out.println( "FolderTreePanel.distribute(ae): " + event ); } actionListener_.actionPerformed( event ); } public ActionListener getActionListener() { return actionListener_; } public DefaultMutableTreeNode getRootNode() { return rootNode_; } public void setMessagePanel( MessagePanel messagePanel ) { messagePanel_ = messagePanel; loadRootStores(); } public Store getStore( String name ) { int numRoot = rootNode_.getChildCount(); for ( int i = 0 ; i < numRoot ; ++i ) { StoreTreeNode node = (StoreTreeNode)rootNode_.getChildAt( i ); if ( node != null && name.equals( node.getName() ) ) { return node.getStore(); } } return null; } public void loadRootStores() { if ( messagePanel_ != null ) { messagePanel_.setFolder( null ); } String[] nameList = UserProperties.getStringArray( Configuration.P_STORE_LIST, null ); if ( nameList == null ) return; String[] storeList = new String[ nameList.length ]; String[] spaceList = new String[ nameList.length ]; for ( int i = 0 ; i < nameList.length ; ++i ) { storeList[i] = UserProperties.getProperty( Configuration.PP_STORE_URL + nameList[i], null ); spaceList[i] = UserProperties.getProperty( Configuration.PP_STORE_NMSPC + nameList[i], null ); } setRootStores( nameList, storeList, spaceList ); } private void setRootStores( String[] storeNames, String[] storeList, String[] nameSpaceList ) { try { Session session = ICEMail.getDefaultSession(); String nodeTitle = ICEMail.getBundle().getString( "FolderTree.title.stores" ); rootNode_ = new RootTreeNode( nodeTitle ); // create a node for each store we have for ( int i = 0 ; i < storeList.length ; ++i ) { if ( storeList[i] == null ) continue; URLName urln = new URLName( storeList[i] ); Store store = session.getStore( urln ); StoreTreeNode storenode = new StoreTreeNode( storeNames[i], store, nameSpaceList[i] ); rootNode_.add( storenode ); } } catch ( NoSuchProviderException ex ) { System.err.println( "FolderTreePanel.setRootFolders: NoSuchProviderException: " + ex.getMessage() ); } TreeModel xtreeModel = new DefaultTreeModel( rootNode_ ); tree_.setModel( xtreeModel ); tree_.expandRow( 0 ); } private void openSelectedNode() { DefaultMutableTreeNode node = getSelectedNode(); if ( node instanceof StoreTreeNode ) { tree_.expandPath( new TreePath( node.getPath() ) ); } else if ( node instanceof FolderTreeNode ) { openSelectedFolder(); } } private FolderTreeNode getSelectedFolder() { DefaultMutableTreeNode node = getSelectedNode(); if ( node instanceof FolderTreeNode ) return (FolderTreeNode) node; else return null; } private DefaultMutableTreeNode getSelectedNode() { DefaultMutableTreeNode result = null; TreePath path = tree_.getSelectionPath(); if ( path != null ) { Object obj = path.getLastPathComponent(); result = (DefaultMutableTreeNode) obj; } return result; } private void addNewStore() { OpenStoreDialog dlg = new OpenStoreDialog( (Frame)getTopLevelAncestor() ); dlg.show(); if ( dlg.getStoreURL() != null && dlg.getStoreURL().length() > 0 && dlg.getStoreName() != null && dlg.getStoreName().length() > 0 ) { try { Session session = ICEMail.getDefaultSession(); URLName urln = new URLName( dlg.getStoreURL() ); Store store = session.getStore( urln ); StoreTreeNode newNode = new StoreTreeNode( dlg.getStoreName(), store, dlg.getNameSpace() ); int tsz = rootNode_.getChildCount(); rootNode_.insert( newNode, tsz ); DefaultTreeModel model = (DefaultTreeModel) tree_.getModel(); int[] indices = { tsz }; model.nodesWereInserted( rootNode_, indices ); tree_.expandRow( 0 ); tree_.invalidate(); tree_.validate(); } catch ( NoSuchProviderException ex ) { // UNDONE - notify use with JOptionPane... System.err.println( "FolderTreePanel.setRootFolders: NoSuchProviderException: " +
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -