📄 messagepanel.java
字号:
xstate = ComposeFrame.EDITING; } Message msg = ( (xstate == ComposeFrame.CREATING) ? null : model_.getMessage( idx ) ); String xselection = viewer_.getTextSelection(); if ( xselection != null && xselection.length() == 0 ) { xselection = null; } ComposeFrame xcomposeframe = ComposeMgr.getInstance().getComposeFrame(); xcomposeframe.editMessage( xstate, msg, xselection ); } MainFrame.getInstance().resetCursor(); }//............................................................ private class IActionListener implements ActionListener { /** * Invoked when an action occurs. * <p> * Implementation of java.awt.event.ActionListener.actionPerformed() * * @param event the action event that occured */ public void actionPerformed( ActionEvent event ) { String command = event.getActionCommand(); if ( command.equals( "CUT" ) || command.equals( "COPY" ) || command.equals( "PASTE" ) || command.equals( "UNDO" ) ) { viewer_.distribute( event ); } else if ( command.equals( "EXPUNGE" ) ) { expungeDeletedMessages(); } else if ( command.equals( "DELETEMSG" ) ) { deleteSelectedMessages(); } else if ( command.equals( "NEXTHTML" ) || command.equals( "PREVHTML" ) || command.equals( "STOPHTML" ) ) { viewer_.distribute( event ); } else if ( command.equals( "GETNEWMAIL" ) ) { getNewMail(); } else if ( command.equals( "NEXTMSG" ) ) { moveSelectedMessage( 1 ); } else if ( command.equals( "PREVMSG" ) ) { moveSelectedMessage( -1 ); } else if ( command.equals( "PRINTMSG" ) ) { printSelectedMessages(); } else if ( command.equals( "BROWSESEL" ) ) { String selStr = viewer_.getTextSelection(); if ( selStr != null && selStr.length() > 0 ) { HotJavaMailBrowser.setBrowserDocumentString( selStr ); } } else if ( command.startsWith( "REPLY" ) || command.startsWith( "FORWARD" ) || command.startsWith( "COMPOSE" ) || command.startsWith( "EDIT" ) ) { composeMessage( command ); } else if ( command.equals( "PROPS" ) ) { showMessageProperties(); } else if ( command.equals( "DUMPTOFILE" ) ) { dumpSelectedMessages(); } else if ( command.equals( "TOGGLEHDRS" ) ) { JCheckBoxMenuItem xmenuitem = (JCheckBoxMenuItem)event.getSource(); viewer_.setFullHeaders( xmenuitem.getState() ); } else if ( command.equals( "TOGGLESMIME" ) ) { JCheckBoxMenuItem xmenuitem = (JCheckBoxMenuItem)event.getSource(); viewer_.setParseSMimeMessages( xmenuitem.getState() ); } else { // distribute to the sub-panels } } }//............................................................ private class ITableCellRenderer extends DefaultTableCellRenderer { private DateFormat dateFmt; public ITableCellRenderer() { super(); if ( Package.DEBUG && Package.isTraceable( "MessagePanel" ) ) { System.err.println( "MessagePanel.ITableCellRenderer()" ); } dateFmt = DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.MEDIUM, ICEMail.getLocale() );// String dateFmtProp =// UserProperties.getProperty// ( "folder.dateFormat",// "E yyMMdd hh:mm:ss a" );//// this.dateFmt =// new SimpleDateFormat( dateFmtProp, ICEMail.getLocale() );//// this.dateFmt.setTimeZone( TimeZone.getDefault() ); } public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column ) { Component result = super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column ); Flags f = model_.getMessageFlags( row ); if ( f.contains( Flags.Flag.SEEN ) ) { setForeground( MessagePanel.OldMsgColor_ ); } else { setForeground( MessagePanel.NewMsgColor_ ); } if ( value instanceof Date ) { String dateStr = this.dateFmt.format( (Date) value ); setText( dateStr ); setIcon( null ); } else if ( value instanceof String ) { setText( (String)value ); setIcon( null ); } else if ( value instanceof JLabel ) { setText( ((JLabel)value).getText() ); setIcon( ((JLabel)value).getIcon() ); } return this; } }//............................................................ private class IListSelectionListener implements ListSelectionListener { public void valueChanged( ListSelectionEvent event ) { if ( model_ != null && ! event.getValueIsAdjusting() ) { ListSelectionModel lm = (ListSelectionModel) event.getSource(); int idx = lm.getMinSelectionIndex(); if ( idx != -1 && idx < messageTable_.getRowCount() && messageTable_.isRowSelected( idx ) ) { if ( idx != currentIndex_ ) { MainFrame.getInstance().setWaitCursor(); statusBar_.setCurrentMessageNum( idx + 1 ); model_.setMessageSeen( idx ); Message msg = model_.getMessage( idx ); viewer_.setMessage( msg ); currentIndex_ = idx; MainFrame.getInstance().resetCursor(); } } } } }//............................................................ private class IExpungeRunner implements DialogRunnable { private Folder exFolder; public IExpungeRunner( Folder folder ) { this.exFolder = folder; } public void run( JDialog dialog, JProgressBar progress ) { dialog.show(); progress.setValue( 33 ); try { MailEventThread.getInstance().notifyIncomingMail( this.exFolder, false ); // close the folder, expunging deleted messages MailUtilities.setStoreConnected( exFolder.getStore() ); synchronized ( exFolder ) { if ( exFolder.isOpen() ) { exFolder.close( true ); } } progress.setValue( 66 ); folder_ = null; setFolder( exFolder ); progress.setValue( 95 ); System.gc(); progress.setValue( 100 ); } catch ( MessagingException ex ) { Object[] xargs = new Object[1]; xargs[0] = ex.getMessage(); ComponentFactory.showDialog( ICEMail.getBundle(), "MessagePanel.ExpungeError", 0, JOptionPane.ERROR_MESSAGE, xargs ); } dialog.dispose(); } }//............................................................ private class INewMailRunner implements DialogRunnable { public INewMailRunner() { } public void run( JDialog dialog, JProgressBar progress ) { dialog.show(); progress.setValue( 25 ); try { MailUtilities.setFolderOpenAndReady( folder_, Folder.READ_WRITE ); if ( folder_.hasNewMessages() ) { Folder f = folder_; progress.setValue( 50 ); // close the folder MailUtilities.setStoreConnected( f.getStore() ); synchronized ( f ) { if ( f.isOpen() ) { f.close( false ); } } progress.setValue( 75 ); // reset and get the folder contents again folder_ = null; setFolder( f ); progress.setValue( 95 ); System.gc(); progress.setValue( 100 ); } else { progress.setValue( 100 ); int delay = UserProperties.getProperty( "retrieveDelayMillis", 500 ); try { Thread.currentThread().sleep( delay ); } catch ( InterruptedException ex ) { } } } catch ( MessagingException ex ) { Object[] xargs = new Object[1]; xargs[0] = ex.getMessage(); ComponentFactory.showDialog( ICEMail.getBundle(), "MessagePanel.RetrieveError", 0, JOptionPane.ERROR_MESSAGE, xargs ); } dialog.dispose(); } }//............................................................ private class IMouseAdapter extends MouseAdapter { int previousColumn_ = -1; boolean previousAscending_ = false; // UNDONE This needs to be 'invokeLater'-ed. public void mouseClicked( MouseEvent evt ) { if ( Package.DEBUG && Package.isTraceable( "MessagePanel" ) ) { System.err.println( "MessagePanel.mouseClicked(): " + evt ); } if ( evt.getClickCount() == 1 ) { boolean xascending = ( (evt.getModifiers() & InputEvent.SHIFT_MASK) == 0 ); TableColumnModel xmodel = messageTable_.getColumnModel(); int xindex = xmodel.getColumnIndexAtX( evt.getX() ); int xcolumn = messageTable_.convertColumnIndexToModel( xindex ); if ( xcolumn != -1 ) { if ( previousColumn_ == xcolumn ) { if ( Package.DEBUG && Debug_ > 0 ) { System.err.println( "MessagePanel.mouseClicked(): as-" + xascending + " pas-" + previousAscending_ ); } xascending = (previousAscending_) ? false : true; } messageTable_.getSelectionModel().clearSelection(); currentIndex_ = -1; Object[] xargs = { folder_.getName() }; String msg = ICEMail.getBundle().getFormatString( "MessagePanel.Sorting", xargs ); String title = ICEMail.getBundle().getString( "MessagePanel.Sorting.title" ); DialogRunner runner = new DialogRunner( new ISortMailRunner( xcolumn, xascending ), (Frame)getTopLevelAncestor(), title, msg ); runner.start(); previousAscending_ = xascending; previousColumn_ = xcolumn; } } } }//............................................................ private class ISortMailRunner implements DialogRunnable { private int sortColumn; private boolean sortAscend; public ISortMailRunner( int col, boolean asc ) { this.sortColumn = col; this.sortAscend = asc; } public void run( JDialog dialog, JProgressBar progress ) { dialog.show(); MainFrame.getInstance().setWaitCursor(); progress.setMaximum( 10 + (messageTable_.getRowCount() * 2) ); progress.setValue( 5 ); model_.cacheAllMessages( progress ); progress.setValue( progress.getValue() + 5 ); model_.sortOnColumn( progress, this.sortColumn, this.sortAscend ); System.gc(); progress.setValue( progress.getMaximum() ); viewer_.setMessage( null ); statusBar_.setCurrentMessageNum( 1 ); showTableRow( 0 ); if ( messageTable_.getRowCount() > 0 ) { messageTable_.setRowSelectionInterval( 0, 0 ); } MainFrame.getInstance().resetCursor(); dialog.dispose(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -