📄 excerptview.cpp
字号:
xrpt.m_tmDate.Format( _T("%c") ) : _T("...");
VERIFY( list.SetItemText( intIndex, COLUMN_DATE, strTmp ) );
}
int nImage = -1;
BOOL bHighPr = (xrpt.m_nPriority>0 && xrpt.m_nPriority<3);
if (xrpt.m_bitRemoveFromServer)
nImage = MI_DELETED;
else if (xrpt.m_bitDownloadData)
nImage = MI_TOLOAD;
else if (!xrpt.WasRead() && bHighPr)
nImage = MI_NEW_MAIL_HIGH;
else if ( !xrpt.WasRead() )
nImage = MI_NEW_MAIL;
else if (bHighPr)
nImage = MI_HIGH;
else if (xrpt.m_strContent.Find("multipart")==0)
nImage = MI_ATTACH;
list.SetItem(intIndex, 0, LVIF_IMAGE, NULL, nImage, 0, 0, 0);
//
int nOverlay = 0;
if (xrpt.m_strContent.Find("multipart")==0)
{
nOverlay = INDEXTOOVERLAYMASK( 1 );
}
list.SetItemState( intIndex, nOverlay, LVIS_OVERLAYMASK );
if( bInserted || xrpt.IsChanged( COLUMN_SIZE ) )
{
CString strTmp = _T("...");
if( xrpt.m_intSize ) strTmp.Format( _T("%d"), xrpt.m_intSize );
VERIFY( list.SetItemText( intIndex, COLUMN_SIZE, strTmp ) );
}
if( bInserted || xrpt.IsChanged( theApp.intEVSortColumn ) ) SortItems();
}
else if( pHint->IsKindOf( RUNTIME_CLASS( CMailbox ) ) )
{
CMailbox &mbox = *(CMailbox*) pHint;
if( mbox.IsChanged( COLUMN_SELECTED ) )
{
for( int i = 0; i < mbox.m_arrayExcerpt.GetSize(); ++i )
{
OnUpdate( 0, HINT_UPDATE_ITEM, mbox.m_arrayExcerpt[i] );
}
}
if( mbox.IsChanged( COLUMN_ALIAS ) )
{
for( int i = 0; i < list.GetItemCount(); ++i )
{
CExcerpt &xrpt = *(CExcerpt*) list.GetItemData(i);
if( xrpt.m_pMailbox == &mbox )
{
VERIFY( list.SetItemText( i, COLUMN_MBOX, xrpt.m_pMailbox->m_strAlias ) );
}
}
}
}
else ASSERT( 0 );
}
void CExcerptView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
UNUSED_ALWAYS(pNMHDR);
UNUSED_ALWAYS(pResult);
int nDiff = GetTickCount() - m_dwLastRButtonDown;
if (m_dwLastRButtonDown && nDiff>250 && nDiff<10000)
{
DoAction(theApp.intRB2Action, ACT_HEADER);
}
else
DoAction(theApp.intRBAction, ACT_MENU);
}
void CExcerptView::DoAction(int nAction, int nDefault)
{
m_TitleTip.Hide();
switch (nAction)
{
case ACT_QVIEW:
SendMessage( WM_COMMAND, ID_QUICK_VIEW );
break;
case ACT_MENU:
{
POINT pt = {0};
VERIFY( GetCursorPos( &pt ) );
ShowContextMenu( pt );
break;
}
case ACT_HEADER:
theApp.m_nMsgPropPage = 1;
SendMessage( WM_COMMAND, ID_EDIT_PROPERTIES );
break;
case ACT_PROPS:
SendMessage( WM_COMMAND, ID_EDIT_PROPERTIES );
break;
case ACT_PREVIEW:
SendMessage( WM_COMMAND, ID_TEXT_PREVIEW );
break;
case ACT_ASTEXT:
SendMessage( WM_COMMAND, ID_QUICKTEXT );
break;
default:
if (nDefault>0)
DoAction(nDefault, 0);
break;
}
}
void CExcerptView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
{
UNUSED_ALWAYS(pNMHDR);
DoAction(theApp.intDblAction, ACT_QVIEW);
*pResult = 0;
}
void CExcerptView::OnEditProperties()
{
CTypedPtrArray < CPtrArray, CExcerpt* > arrayExcerpt;
CListCtrl &list = GetListCtrl();
int i = -1;
while( -1 != ( i = list.GetNextItem( i, LVNI_SELECTED ) ) )
{
arrayExcerpt.Add( (CExcerpt*) list.GetItemData(i) );
}
CHeaderPage pageH;
CRawHead pageRaw;
pageH.Attach( &arrayExcerpt );
pageRaw.Attach( &arrayExcerpt );
CPropertySheet sheet( IDP_EXCERPT_PROPERTIES_TITLE, AfxGetMainWnd() );
sheet.AddPage( &pageH );
sheet.AddPage( &pageRaw );
if (theApp.m_nMsgPropPage)
{
sheet.m_psh.nStartPage = theApp.m_nMsgPropPage;
}
theApp.m_nMsgPropPage = 0;
sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
sheet.DoModal();
}
void CExcerptView::OnUpdateIfSelectedCount(CCmdUI* pCmdUI)
{
pCmdUI->Enable( GetListCtrl().GetSelectedCount() );
}
/*
void CExcerptView::OnUpdateIfItemCount(CCmdUI* pCmdUI)
{
pCmdUI->Enable( GetListCtrl().GetItemCount() );
}
*/
void CExcerptView::OnViewRefresh()
{
CMagicDoc *doc = (CMagicDoc*) GetDocument();
if( doc ) doc->Check();
}
void CExcerptView::OnStopChecking()
{
CMagicDoc *doc = (CMagicDoc*) GetDocument();
if( doc ) doc->StopChecking();
}
void CExcerptView::OnQuickView()
{
CListCtrl &list = GetListCtrl();
for( int i = list.GetItemCount(); i; --i )
{
if( LVNI_SELECTED == list.GetItemState( i-1, LVNI_SELECTED ) )
{
( (CExcerpt*) list.GetItemData( i-1 ) )->QuickView();
}
}
}
void CExcerptView::OnQuickReply()
{
CListCtrl &list = GetListCtrl();
CString strRcpt;
CString strSubject;
int i = list.GetItemCount();
while( i-- )
{
if( LVNI_SELECTED == list.GetItemState( i, LVNI_SELECTED ) )
{
CExcerpt &expt = *( (CExcerpt*) list.GetItemData( i ) );
if( !strRcpt.IsEmpty() ) strRcpt += _T(",");
if (expt.m_sReplyTo.IsEmpty())
strRcpt += expt.m_strFrom;
else
strRcpt += expt.m_sReplyTo;
if( strSubject.IsEmpty() ) strSubject = expt.m_strSubject;
else
{
if( strSubject != expt.m_strSubject ) strSubject = _T("...");
}
}
}
/* mark subject by "Re: "(-ply) if not already marked */
if( _tcsnicmp( strSubject, _T("Re: "), 4 ) ) strSubject = _T("Re: ") + strSubject;
CString strCommand;
strCommand.Format("mailto:%s?subject=%s", strRcpt, strSubject );
/* launch mailer now! */
if( (int) ShellExecute( NULL, _T("open"), strCommand, _T(""), _T(""), SW_NORMAL ) < 32 )
{
CString strMessage;
AfxFormatString1( strMessage, IDP_CANNOT_FOLLOW_THE_LINK_1, strCommand );
AfxMessageBox( strMessage );
}
}
void CExcerptView::OnUpdateViewRefresh(CCmdUI* pCmdUI)
{
CMagicDoc *doc = (CMagicDoc*) GetDocument();
if( doc ) pCmdUI->Enable( doc->m_listMailbox.GetCount() );
}
void CExcerptView::OnUpdateStopChecking(CCmdUI* pCmdUI)
{
CMagicDoc *doc = (CMagicDoc*) GetDocument();
if( doc ) pCmdUI->Enable( doc->m_listMailbox.GetCount() );
}
void CExcerptView::OnUpdateIndicatorObjects( CCmdUI *pCmdUI )
{
CListCtrl &list = GetListCtrl();
pCmdUI->Enable();
UINT uintSelected = list.GetSelectedCount();
UINT uintTotal = list.GetItemCount();
UINT uintReported = uintSelected ? uintSelected : uintTotal;
CString strTmp1, strTmp2, strObjects;
LOAD_STRING(strTmp1, (uintReported -1 ? IDP_MESSAGES : IDP_MESSAGE ) );
if( uintSelected )
{
LOAD_STRING(strTmp2, IDP_SELECTED );
}
strObjects.Format( _T("%d %s %s"), uintReported, strTmp1, strTmp2 );
pCmdUI->SetText( strObjects );
}
void CExcerptView::OnUpdateIndicatorContents( CCmdUI *pCmdUI )
{
CListCtrl &list = GetListCtrl();
pCmdUI->Enable();
int intCount = 0;
int nLoaded = 0;
BOOL bNoneSelected = !list.GetSelectedCount();
for( int i = list.GetItemCount(); i; --i )
{
if( bNoneSelected || list.GetItemState( i-1, LVIS_SELECTED ) )
{
intCount += ( (CExcerpt*) list.GetItemData( i-1 ) )->m_intSize;
nLoaded += ( (CExcerpt*) list.GetItemData( i-1 ) )->m_nLoadedSize;
}
}
CString strContents;
BytesToString( intCount, strContents );
if (nLoaded && nLoaded<intCount)
{
CString s;
s.Format("%s [%d]", strContents, nLoaded);
strContents = s;
}
pCmdUI->SetText( strContents );
}
void CExcerptView::OnQuickDelete()
{
if( theApp.intEVConfirmDelete &&
( IDYES != AfxMessageBox( IDS_DELETE_CNF, MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2 ) ) ) return;
CListCtrl &list = GetListCtrl();
for( int i = list.GetItemCount(); i; --i )
{
if( list.GetItemState( i-1, LVIS_SELECTED ) )
{
CExcerpt &xrpt = *( (CExcerpt*) list.GetItemData( i-1 ) );
xrpt.m_bitRemoveFromServer = 1;
xrpt.Change( COLUMN_MBOX );
xrpt.m_pMailbox->Check();
}
}
}
void CExcerptView::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDown = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
m_TitleTip.Hide();
*pResult = 0;
switch (pLVKeyDown->wVKey)
{
case VK_APPS:
{
CListCtrl &list = GetListCtrl();
int iFocusedItem = list.GetNextItem( -1, LVNI_FOCUSED );
POINT pt = {0};
if( iFocusedItem != -1 )
{
RECT rc = {0};
list.GetItemRect( iFocusedItem, &rc, LVIR_BOUNDS );
pt.x = rc.left;
pt.y = rc.bottom;
}
ClientToScreen( &pt );
ShowContextMenu( pt );
break;
}
case VK_TAB:
{
CMagicFrame *frame = (CMagicFrame*) GetParentFrame();
if( frame )
frame->SwitchPane();
break;
}
case VK_SPACE:
case 'S': case 's':
{
CListCtrl &list = GetListCtrl();
BOOL bSpace = (pLVKeyDown->wVKey == VK_SPACE);
int nRead = -1;
for( int i = list.GetItemCount(); i; --i )
{
if( LVNI_SELECTED == list.GetItemState( i-1, LVNI_SELECTED ) )
{
CExcerpt* pEx = ( (CExcerpt*) list.GetItemData( i-1 ) );
if (!pEx)
continue;
if (bSpace)
{
if (nRead == -1)
nRead = (pEx->m_bitWasRead == 0);
pEx->MarkAsRead(nRead);
}
else
{
if (nRead == -1)
nRead = (pEx->m_dwFiltered & MFA_SPAM_MAN)==0;
pEx->MarkAsSpam(nRead);
}
}
}
break;
}
}
}
void CExcerptView::ShowContextMenu( const POINT& pt )
{
CMenu menuPopup;
VERIFY( menuPopup.LoadMenu( IDR_EXCERPT_POPUP_MENU ) );
// set default state
UINT nID = ID_QUICK_VIEW;
if (theApp.intDblAction == ACT_PROPS)
nID = ID_EDIT_PROPERTIES;
else if (theApp.intDblAction == ACT_PREVIEW)
nID = ID_TEXT_PREVIEW;
else if (theApp.intDblAction == ACT_ASTEXT)
nID = ID_QUICKTEXT;
else
nID = 0;
if (nID)
{
MENUITEMINFO info;
info.cbSize = sizeof( info );
info.fMask = MIIM_STATE;
info.fState = MFS_DEFAULT;
VERIFY( SetMenuItemInfo( menuPopup.m_hMenu, nID, FALSE, &info ) );
}
MenuTranslate(menuPopup.GetSubMenu(0)->m_hMenu);
menuPopup.GetSubMenu(0)->TrackPopupMenu(
TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON,
pt.x, pt.y, AfxGetMainWnd(), NULL );
}
void CExcerptView::OnLoad()
{
CListCtrl &list = GetListCtrl();
for( int i = list.GetItemCount(); i; --i )
{
if( LVNI_SELECTED == list.GetItemState( i-1, LVNI_SELECTED ) )
{
( (CExcerpt*) list.GetItemData( i-1 ) )->QuickLoad();
}
}
}
void CExcerptView::OnQuicktext()
{
CListCtrl &list = GetListCtrl();
for( int i = list.GetItemCount(); i; --i )
{
if( LVNI_SELECTED == list.GetItemState( i-1, LVNI_SELECTED ) )
{
( (CExcerpt*) list.GetItemData( i-1 ) )->QuickText();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -