|
|
// ViewRow.cpp: implementation of the CViewRow class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#define __FILE_ID__ 31
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW
#endif
//
// The following four arrays of strings are filled during app. startup from
// the string table resource by calling InitStrings
//
CString CViewRow::m_cstrPriorities[FAX_PRIORITY_TYPE_HIGH+1]; CString CViewRow::m_cstrQueueStatus[NUM_JOB_STATUS]; CString CViewRow::m_cstrQueueExtendedStatus[JS_EX_CALL_ABORTED - JS_EX_DISCONNECTED + 1]; CString CViewRow::m_cstrMessageStatus[2];
int CViewRow::m_Alignments[MSG_VIEW_ITEM_END] = { LVCFMT_LEFT, // MSG_VIEW_ITEM_ICON
LVCFMT_LEFT, // MSG_VIEW_ITEM_STATUS
LVCFMT_LEFT, // MSG_VIEW_ITEM_SERVER
LVCFMT_RIGHT, // MSG_VIEW_ITEM_NUM_PAGES
LVCFMT_LEFT, // MSG_VIEW_ITEM_CSID
LVCFMT_LEFT, // MSG_VIEW_ITEM_TSID
LVCFMT_RIGHT, // MSG_VIEW_ITEM_SIZE
LVCFMT_LEFT, // MSG_VIEW_ITEM_DEVICE
LVCFMT_RIGHT, // MSG_VIEW_ITEM_RETRIES
LVCFMT_RIGHT, // MSG_VIEW_ITEM_ID
LVCFMT_RIGHT, // MSG_VIEW_ITEM_BROADCAST_ID
LVCFMT_LEFT, // MSG_VIEW_ITEM_CALLER_ID
LVCFMT_LEFT, // MSG_VIEW_ITEM_ROUTING_INFO
LVCFMT_LEFT, // MSG_VIEW_ITEM_DOC_NAME
LVCFMT_LEFT, // MSG_VIEW_ITEM_SUBJECT
LVCFMT_LEFT, // MSG_VIEW_ITEM_RECIPIENT_NAME
LVCFMT_LEFT, // MSG_VIEW_ITEM_RECIPIENT_NUMBER
LVCFMT_LEFT, // MSG_VIEW_ITEM_USER
LVCFMT_LEFT, // MSG_VIEW_ITEM_PRIORITY
LVCFMT_LEFT, // MSG_VIEW_ITEM_ORIG_TIME
LVCFMT_LEFT, // MSG_VIEW_ITEM_SUBMIT_TIME
LVCFMT_LEFT, // MSG_VIEW_ITEM_BILLING
LVCFMT_LEFT, // MSG_VIEW_ITEM_TRANSMISSION_START_TIME
LVCFMT_LEFT, // MSG_VIEW_ITEM_SEND_TIME
LVCFMT_LEFT, // MSG_VIEW_ITEM_EXTENDED_STATUS
LVCFMT_RIGHT, // MSG_VIEW_ITEM_CURRENT_PAGE
LVCFMT_LEFT, // MSG_VIEW_ITEM_SENDER_NAME
LVCFMT_LEFT, // MSG_VIEW_ITEM_SENDER_NUMBER
LVCFMT_LEFT, // MSG_VIEW_ITEM_TRANSMISSION_END_TIME
LVCFMT_RIGHT // MSG_VIEW_ITEM_TRANSMISSION_DURATION
};
int CViewRow::m_TitleResources[MSG_VIEW_ITEM_END] = { IDS_COLUMN_ICON, // MSG_VIEW_ITEM_ICON,
IDS_MSG_COLUMN_STATUS, // MSG_VIEW_ITEM_STATUS,
IDS_MSG_COLUMN_SERVER, // MSG_VIEW_ITEM_SERVER,
IDS_MSG_COLUMN_NUM_PAGES, // MSG_VIEW_ITEM_NUM_PAGES,
IDS_MSG_COLUMN_CSID, // MSG_VIEW_ITEM_CSID,
IDS_MSG_COLUMN_TSID, // MSG_VIEW_ITEM_TSID,
IDS_MSG_COLUMN_SIZE, // MSG_VIEW_ITEM_SIZE,
IDS_MSG_COLUMN_DEVICE, // MSG_VIEW_ITEM_DEVICE,
IDS_MSG_COLUMN_RETRIES, // MSG_VIEW_ITEM_RETRIES,
IDS_MSG_COLUMN_JOB_ID, // MSG_VIEW_ITEM_ID,
IDS_MSG_COLUMN_BROADCAST_ID,// MSG_VIEW_ITEM_BROADCAST_ID
IDS_MSG_COLUMN_CALLER_ID, // MSG_VIEW_ITEM_CALLER_ID,
IDS_MSG_COLUMN_ROUTING_INFO,// MSG_VIEW_ITEM_ROUTING_INFO,
IDS_MSG_COLUMN_DOC_NAME, // MSG_VIEW_ITEM_DOC_NAME,
IDS_MSG_COLUMN_SUBJECT, // MSG_VIEW_ITEM_SUBJECT,
IDS_MSG_COLUMN_RECP_NAME, // MSG_VIEW_ITEM_RECIPIENT_NAME,
IDS_MSG_COLUMN_RECP_NUM, // MSG_VIEW_ITEM_RECIPIENT_NUMBER,
IDS_MSG_COLUMN_USER, // MSG_VIEW_ITEM_USER,
IDS_MSG_COLUMN_PRIORITY, // MSG_VIEW_ITEM_PRIORITY,
IDS_MSG_COLUMN_ORIG_TIME, // MSG_VIEW_ITEM_ORIG_TIME,
IDS_MSG_COLUMN_SUBMIT_TIME, // MSG_VIEW_ITEM_SUBMIT_TIME,
IDS_MSG_COLUMN_BILLING, // MSG_VIEW_ITEM_BILLING,
IDS_MSG_COLUMN_TRANSMISSION_START_TIME, // MSG_VIEW_ITEM_TRANSMISSION_START_TIME,
IDS_MSG_COLUMN_SEND_TIME, // MSG_VIEW_ITEM_SEND_TIME,
IDS_MSG_COLUMN_EX_STATUS, // MSG_VIEW_ITEM_EXTENDED_STATUS,
IDS_MSG_COLUMN_CURR_PAGE, // MSG_VIEW_ITEM_CURRENT_PAGE,
IDS_MSG_COLUMN_SENDER_NAME, // MSG_VIEW_ITEM_SENDER_NAME,
IDS_MSG_COLUMN_SENDER_NUM, // MSG_VIEW_ITEM_SENDER_NUMBER,
IDS_MSG_COLUMN_TRANSMISSION_END_TIME, // MSG_VIEW_ITEM_TRANSMISSION_END_TIME,
IDS_MSG_COLUMN_TRANSMISSION_DURATION // MSG_VIEW_ITEM_TRANSMISSION_DURATION,
};
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
DWORD CViewRow::InitStrings () /*++
Routine name : CViewRow::InitStrings
Routine description:
Loads the static strings used to display status etc. Static.
Author:
Eran Yariv (EranY), Jan, 2000
Arguments:
Return Value:
Standard Win32 error code
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CViewRow::InitStrings"), dwRes); //
// Load strings used for diaply throughout the application - job status
//
int iStatusIds[] = { IDS_PENDING, IDS_INPROGRESS, IDS_DELETING, IDS_PAUSED, IDS_RETRYING, IDS_RETRIES_EXCEEDED, IDS_COMPLETED, IDS_CANCELED, IDS_CANCELING, IDS_ROUTING, IDS_ROUTING_RETRY, IDS_ROUTING_INPROGRESS, IDS_ROUTING_FAILED };
for (int i = JOB_STAT_PENDING; i < NUM_JOB_STATUS; i++) { dwRes = LoadResourceString (m_cstrQueueStatus[i], iStatusIds[i]); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (RESOURCE_ERR, TEXT("LoadResourceString"), dwRes); return dwRes; } } //
// Load strings used for diaply throughout the application - job extended status
//
int iExtStatusIds[] = { IDS_DISCONNECTED, IDS_INITIALIZING, IDS_DIALING, IDS_TRANSMITTING, IDS_ANSWERED, IDS_RECEIVING, IDS_LINE_UNAVAILABLE, IDS_BUSY, IDS_NO_ANSWER, IDS_BAD_ADDRESS, IDS_NO_DIAL_TONE, IDS_FATAL_ERROR, IDS_CALL_DELAYED, IDS_CALL_BLACKLISTED, IDS_NOT_FAX_CALL, IDS_STATUS_PARTIALLY_RECEIVED, IDS_HANDLED, IDS_CALL_COMPLETED, IDS_CALL_ABORTED }; for (i = 0; i < sizeof(iExtStatusIds) / sizeof (iExtStatusIds[0]); i++) { dwRes = LoadResourceString (m_cstrQueueExtendedStatus[i], iExtStatusIds[i]); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (RESOURCE_ERR, TEXT("LoadResourceString"), dwRes); return dwRes; } } int iPrioritiyIds[] = { IDS_LOW_PRIORITY, IDS_NORMAL_PRIORITY, IDS_HIGH_PRIORITY };
for (i = FAX_PRIORITY_TYPE_LOW; i <= FAX_PRIORITY_TYPE_HIGH; i++) { dwRes = LoadResourceString (m_cstrPriorities[i], iPrioritiyIds[i]); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (RESOURCE_ERR, TEXT("LoadResourceString"), dwRes); return dwRes; } } dwRes = LoadResourceString (m_cstrMessageStatus[0], IDS_STATUS_SUCCESS); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (RESOURCE_ERR, TEXT("LoadResourceString"), dwRes); return dwRes; } dwRes = LoadResourceString (m_cstrMessageStatus[1], IDS_STATUS_PARTIALLY_RECEIVED); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (RESOURCE_ERR, TEXT("LoadResourceString"), dwRes); return dwRes; } return dwRes; } // CViewRow::InitStrings
DWORD CViewRow::GetItemTitle ( DWORD item, CString &cstrRes ) /*++
Routine name : CViewRow::GetItemTitle
Routine description:
Retrieves the title string of an item in the view
Author:
Eran Yariv (EranY), Jan, 2000
Arguments:
item [in ] - Item cstrRes [out] - String buffer
Return Value:
Standard Win32 error code
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CViewRow::GetItemTitle"), dwRes);
ASSERTION (item < MSG_VIEW_ITEM_END);
dwRes = LoadResourceString (cstrRes, m_TitleResources[item]); if (ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("LoadResourceString"), dwRes); } return dwRes;
} // CViewRow::GetItemTitle
DWORD CViewRow::DetachFromMsg() /*++
Routine name : CViewRow::DetachFromMsg
Routine description:
Ivalidate content, empty all strings
Author:
Alexander Malysh (AlexMay), Apr, 2000
Arguments:
Return Value:
Standard Win32 error code
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CViewRow::ResetDisplayStrings"), dwRes);
m_bAttached = FALSE; m_bStringsPreparedForDisplay = FALSE;
for(DWORD dw=0; dw < MSG_VIEW_ITEM_END; ++dw) { try { m_Strings[dw].Empty(); } catch(...) { dwRes = ERROR_NOT_ENOUGH_MEMORY; CALL_FAIL (GENERAL_ERR, TEXT("CString::Empty"), dwRes); return dwRes; } }
return dwRes; }
DWORD CViewRow::AttachToMsg( CFaxMsg *pMsg, BOOL PrepareStrings ) /*++
Routine name : CViewRow::AttachToMsg
Routine description:
Attach the view row to an existing message.
Author:
Eran Yariv (EranY), Jan, 2000
Arguments:
pMsg [in] - Message to attach to PrepareStrings [in] - If TRUE, also create internal strings representation for list display.
Return Value:
Standard Win32 error code
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CViewRow::AttachToMsg"), dwRes);
ASSERTION (pMsg);
dwRes = DetachFromMsg(); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("DetachFromMsg"), dwRes); return dwRes; }
if (PrepareStrings) { DWORD dwValidityMask = pMsg->GetValidityMask (); try { //
// Msg id
//
m_Strings[MSG_VIEW_ITEM_ID] = DWORDLONG2String (pMsg->GetId());
//
// Msg broadcast id
//
m_Strings[MSG_VIEW_ITEM_BROADCAST_ID] = (pMsg->GetBroadcastId() != 0) ? DWORDLONG2String (pMsg->GetBroadcastId()) : TEXT("");
//
// Msg size
//
if (dwValidityMask & FAX_JOB_FIELD_SIZE) { dwRes = FaxSizeFormat(pMsg->GetSize(), m_Strings[MSG_VIEW_ITEM_SIZE]); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("FaxSizeFormat"), dwRes); return dwRes; } } //
// Page count
//
if (dwValidityMask & FAX_JOB_FIELD_PAGE_COUNT) { m_Strings[MSG_VIEW_ITEM_NUM_PAGES] = DWORD2String (pMsg->GetNumPages()); } //
// Original scheduled time
//
if (dwValidityMask & FAX_JOB_FIELD_ORIGINAL_SCHEDULE_TIME) { m_Strings[MSG_VIEW_ITEM_ORIG_TIME] = pMsg->GetOrigTime().FormatByUserLocale (); } //
// Submission time
//
if (dwValidityMask & FAX_JOB_FIELD_SUBMISSION_TIME) { m_Strings[MSG_VIEW_ITEM_SUBMIT_TIME] = pMsg->GetSubmissionTime().FormatByUserLocale (); } //
// Transmission start time
//
if (dwValidityMask & FAX_JOB_FIELD_TRANSMISSION_START_TIME) { m_Strings[MSG_VIEW_ITEM_TRANSMISSION_START_TIME] = pMsg->GetTransmissionStartTime().FormatByUserLocale (); }
//
// Transmission end time
//
if (dwValidityMask & FAX_JOB_FIELD_TRANSMISSION_END_TIME) { m_Strings[MSG_VIEW_ITEM_TRANSMISSION_END_TIME] = pMsg->GetTransmissionEndTime().FormatByUserLocale (); }
//
// Priority
//
if (dwValidityMask & FAX_JOB_FIELD_PRIORITY) { m_Strings[MSG_VIEW_ITEM_PRIORITY] = m_cstrPriorities[pMsg->GetPriority()]; } //
// Retries
//
if (dwValidityMask & FAX_JOB_FIELD_RETRIES) { m_Strings[MSG_VIEW_ITEM_RETRIES] = DWORD2String (pMsg->GetRetries()); } //
// Recipient info
//
m_Strings[MSG_VIEW_ITEM_RECIPIENT_NUMBER] = pMsg->GetRecipientNumber();
#ifdef UNICODE
if(theApp.IsRTLUI()) { //
// Phone number always should be LTR
// Add LEFT-TO-RIGHT OVERRIDE (LRO)
//
m_Strings[MSG_VIEW_ITEM_RECIPIENT_NUMBER].Insert(0, UNICODE_LRO); } #endif
m_Strings[MSG_VIEW_ITEM_RECIPIENT_NAME] = pMsg->GetRecipientName(); //
// TSID / CSID
//
m_Strings[MSG_VIEW_ITEM_TSID] = pMsg->GetTSID(); m_Strings[MSG_VIEW_ITEM_CSID] = pMsg->GetCSID(); //
// User
//
m_Strings[MSG_VIEW_ITEM_USER] = pMsg->GetUser(); //
// Billing
//
m_Strings[MSG_VIEW_ITEM_BILLING] = pMsg->GetBilling(); //
// Device
//
m_Strings[MSG_VIEW_ITEM_DEVICE] = pMsg->GetDevice(); //
// Document
//
m_Strings[MSG_VIEW_ITEM_DOC_NAME] = pMsg->GetDocName(); //
// Subject
//
m_Strings[MSG_VIEW_ITEM_SUBJECT] = pMsg->GetSubject(); //
// Caller id
//
m_Strings[MSG_VIEW_ITEM_CALLER_ID] = pMsg->GetCallerId(); //
// Routing info
//
m_Strings[MSG_VIEW_ITEM_ROUTING_INFO] = pMsg->GetRoutingInfo();
//
// Server name
//
m_Strings[MSG_VIEW_ITEM_SERVER] = pMsg->GetServerName(); if(m_Strings[MSG_VIEW_ITEM_SERVER].GetLength() == 0) { dwRes = LoadResourceString(m_Strings[MSG_VIEW_ITEM_SERVER], IDS_LOCAL_SERVER); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("LoadResourceString"), dwRes); return dwRes; } }
//
// Icon
//
m_Icon = CalcIcon (pMsg);
dwRes = InitStatusStr(pMsg); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CViewRow::InitStatusStr"), dwRes); return dwRes; }
dwRes = InitExtStatusStr(pMsg); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CViewRow::InitExtStatusStr"), dwRes); return dwRes; }
if(pMsg->IsKindOf(RUNTIME_CLASS(CArchiveMsg))) { //
// Sender info
//
m_Strings[MSG_VIEW_ITEM_SENDER_NUMBER] = pMsg->GetSenderNumber(); #ifdef UNICODE
if(theApp.IsRTLUI()) { //
// Phone number always should be LTR
// Add LEFT-TO-RIGHT OVERRIDE (LRO)
//
m_Strings[MSG_VIEW_ITEM_SENDER_NUMBER].Insert(0, UNICODE_LRO); } #endif
m_Strings[MSG_VIEW_ITEM_SENDER_NAME] = pMsg->GetSenderName();
//
// Transmission duration
//
if ((dwValidityMask & FAX_JOB_FIELD_TRANSMISSION_END_TIME) && (dwValidityMask & FAX_JOB_FIELD_TRANSMISSION_START_TIME)) { m_Strings[MSG_VIEW_ITEM_TRANSMISSION_DURATION] = pMsg->GetTransmissionDuration().FormatByUserLocale (); } } else if(pMsg->IsKindOf(RUNTIME_CLASS(CJob))) { //
// Current page
//
if (dwValidityMask & FAX_JOB_FIELD_CURRENT_PAGE) { m_Strings[MSG_VIEW_ITEM_CURRENT_PAGE] = DWORD2String (pMsg->GetCurrentPage()); }
//
// Send time
//
if (dwValidityMask & FAX_JOB_FIELD_SCHEDULE_TIME) { m_Strings[MSG_VIEW_ITEM_SEND_TIME] = pMsg->GetScheduleTime().FormatByUserLocale (); } } else { ASSERTION_FAILURE } }
catch (CException *pException) { TCHAR wszCause[1024];
pException->GetErrorMessage (wszCause, 1024); pException->Delete (); VERBOSE (EXCEPTION_ERR, TEXT("CJob::Init caused exception : %s"), wszCause); dwRes = ERROR_NOT_ENOUGH_MEMORY; return dwRes; } m_bStringsPreparedForDisplay = TRUE; } ASSERTION (ERROR_SUCCESS == dwRes); m_bAttached = TRUE; m_pMsg = pMsg; return dwRes; } // CViewRow::AttachToMessage
DWORD CViewRow::InitStatusStr( CFaxMsg *pMsg ) /*++
Routine name : CViewRow::InitStatusStr
Routine description:
Init m_Strings[MSG_VIEW_ITEM_STATUS] string with status
Arguments:
pMsg [in] - CFaxMsg
Return Value:
error code
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CViewRow::InitStatusStr"));
ASSERTION(pMsg);
try { DWORD dwValidityMask = pMsg->GetValidityMask ();
if(pMsg->IsKindOf(RUNTIME_CLASS(CArchiveMsg))) { //
// Status
//
switch (pMsg->GetType()) { case JT_RECEIVE: //
// Received message
//
if ((pMsg->GetExtendedStatus ()) == JS_EX_PARTIALLY_RECEIVED) { //
// Partially received fax
//
m_Strings[MSG_VIEW_ITEM_STATUS] = m_cstrMessageStatus[1]; } else { //
// Fully received fax
//
m_Strings[MSG_VIEW_ITEM_STATUS] = m_cstrMessageStatus[0]; } break;
case JT_SEND: //
// Sent message
//
m_Strings[MSG_VIEW_ITEM_STATUS] = m_cstrMessageStatus[0]; break;
default: ASSERTION_FAILURE; m_Strings[MSG_VIEW_ITEM_STATUS].Empty (); break; } } else if(pMsg->IsKindOf(RUNTIME_CLASS(CJob))) { //
// Queue status
//
ASSERTION (dwValidityMask & FAX_JOB_FIELD_QUEUE_STATUS); JobStatusType stat = pMsg->GetStatus(); BOOL bValidStatus = TRUE; ASSERTION ((stat >= JOB_STAT_PENDING) && (stat < NUM_JOB_STATUS));
if(pMsg->GetType() == JT_ROUTING) { switch(stat) { case JOB_STAT_INPROGRESS: stat = JOB_STAT_ROUTING_INPROGRESS; break; case JOB_STAT_RETRYING: stat = JOB_STAT_ROUTING_RETRY; break; case JOB_STAT_RETRIES_EXCEEDED: stat = JOB_STAT_ROUTING_FAILED; break; default: //
// Future / unknown job status
//
bValidStatus = FALSE; break; }; } if (bValidStatus) { m_Strings[MSG_VIEW_ITEM_STATUS] = m_cstrQueueStatus[stat]; } else { //
// Unknown (future) status - use empty etring
//
m_Strings[MSG_VIEW_ITEM_STATUS].Empty(); } } else { ASSERTION_FAILURE; } } catch(CException *pException) { TCHAR szCause[MAX_PATH];
if(pException->GetErrorMessage(szCause, ARR_SIZE(szCause))) { VERBOSE (EXCEPTION_ERR, TEXT("%s"), szCause); } pException->Delete();
dwRes = ERROR_NOT_ENOUGH_MEMORY; }
return dwRes; }
DWORD CViewRow::InitExtStatusStr( CFaxMsg *pMsg ) /*++
Routine name : CViewRow::InitExtStatusStr
Routine description:
Init m_Strings[MSG_VIEW_ITEM_EXTENDED_STATUS] string with extended status
Arguments:
pMsg [in] - CFaxMsg
Return Value:
error code
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CViewRow::InitExtStatusStr"));
ASSERTION(pMsg);
try { if(pMsg->IsKindOf(RUNTIME_CLASS(CJob))) { //
// Extended status
// Check for extended status string first
//
if (pMsg->GetExtendedStatusString().IsEmpty()) { //
// Empty extended status string, check for well known extended status
//
DWORD dwValidityMask = pMsg->GetValidityMask ();
if ((dwValidityMask & FAX_JOB_FIELD_STATUS_EX)) { //
// Extended status code is reported
//
DWORD dwExtStatus = pMsg->GetExtendedStatus ();
ASSERTION (dwExtStatus >= JS_EX_DISCONNECTED); if (dwExtStatus > FAX_API_VER_1_MAX_JS_EX) { //
// Unknown (future) extended status - use blank string
//
m_Strings[MSG_VIEW_ITEM_EXTENDED_STATUS].Empty(); } else { //
// Predefined extended status
//
m_Strings[MSG_VIEW_ITEM_EXTENDED_STATUS] = m_cstrQueueExtendedStatus[dwExtStatus - JS_EX_DISCONNECTED]; } } } else { //
// We have an extended status string, display it
//
m_Strings[MSG_VIEW_ITEM_EXTENDED_STATUS] = pMsg->GetExtendedStatusString(); } } } catch(CException *pException) { TCHAR szCause[MAX_PATH];
if(pException->GetErrorMessage(szCause, ARR_SIZE(szCause))) { VERBOSE (EXCEPTION_ERR, TEXT("%s"), szCause); } pException->Delete();
dwRes = ERROR_NOT_ENOUGH_MEMORY; }
return dwRes; }
IconType CViewRow::CalcIcon( CFaxMsg *pMsg ) { DBG_ENTER(TEXT("CViewRow::CalcIcon")); ASSERTION(pMsg);
IconType icon = INVALID;
if(pMsg->IsKindOf(RUNTIME_CLASS(CArchiveMsg))) { icon = CalcMessageIcon(pMsg); } else if(pMsg->IsKindOf(RUNTIME_CLASS(CJob))) { icon = CalcJobIcon(pMsg); } else { ASSERTION_FAILURE } return icon; }
IconType CViewRow::CalcJobIcon( CFaxMsg *pJob ) { DBG_ENTER(TEXT("CViewRow::CalcJobIcon")); ASSERTION(pJob);
int iStatus = pJob->GetStatus();
ASSERTION (pJob->GetValidityMask() & FAX_JOB_FIELD_STATUS_SUB_STRUCT); ASSERTION (pJob->GetValidityMask() && FAX_JOB_FIELD_TYPE); switch (pJob->GetType()) { case JT_ROUTING: //
// Routing job
//
switch (iStatus) { case JOB_STAT_PENDING: case JOB_STAT_DELETING: case JOB_STAT_RETRYING: case JOB_STAT_CANCELING: case JOB_STAT_INPROGRESS: return LIST_IMAGE_ROUTING; break;
case JOB_STAT_RETRIES_EXCEEDED: return LIST_IMAGE_ERROR; break;
default: //
// We don't allow MSG_STAT_COMPLETED, MSG_STAT_PAUSED,
// and MSG_STAT_CANCELED.
//
ASSERTION_FAILURE; return INVALID; } break;
case JT_RECEIVE: //
// Receiving job
//
switch (iStatus) { case JOB_STAT_CANCELING: case JOB_STAT_INPROGRESS: case JOB_STAT_ROUTING: return LIST_IMAGE_RECEIVING; break;
default: //
// We don't allow MSG_STAT_COMPLETED, MSG_STAT_PAUSED,
// MSG_STAT_PENDING, MSG_STAT_DELETING,
// MSG_STAT_RETRYING
// MSG_STAT_RETRIES_EXCEEDED,
// and MSG_STAT_CANCELED.
//
ASSERTION_FAILURE; return INVALID; } break;
case JT_SEND: switch (iStatus) { case JOB_STAT_PENDING: case JOB_STAT_DELETING: case JOB_STAT_RETRYING: case JOB_STAT_CANCELING: case JOB_STAT_COMPLETED: case JOB_STAT_CANCELED: return LIST_IMAGE_NORMAL_MESSAGE; break;
case JOB_STAT_RETRIES_EXCEEDED: return LIST_IMAGE_ERROR; break;
case JOB_STAT_PAUSED: return LIST_IMAGE_PAUSED; break;
case JOB_STAT_INPROGRESS: return LIST_IMAGE_SENDING; break;
default: //
// Unknown job status
//
ASSERTION_FAILURE; return INVALID; } break;
default: ASSERTION_FAILURE; return INVALID; } }
IconType CViewRow::CalcMessageIcon( CFaxMsg *pMsg ) { DBG_ENTER(TEXT("CViewRow::CalcMessageIcon")); ASSERTION(pMsg);
switch (pMsg->GetType()) { case JT_RECEIVE: //
// Received message
//
if ((pMsg->GetExtendedStatus ()) == JS_EX_PARTIALLY_RECEIVED) { //
// Partially received fax
//
return LIST_IMAGE_PARTIALLY_RECEIVED; } else { //
// Fully received fax
//
return LIST_IMAGE_SUCCESS; } break;
case JT_SEND: return LIST_IMAGE_SUCCESS;
default: ASSERTION_FAILURE; return INVALID; } }
int CViewRow::CompareByItem ( CViewRow &other, DWORD item ) /*++
Routine name : CViewRow::CompareByItem
Routine description:
Compares a list item against another one
Author:
Eran Yariv (EranY), Jan, 2000
Arguments:
other [in] - Other list item item [in] - Item to compare by
Return Value:
-1 if smaler than other, 0 if identical, +1 if bigger than other
--*/ { DWORD dwRes = ERROR_SUCCESS; DBG_ENTER(TEXT("CViewRow::CompareByItem"));
ASSERTION (item < MSG_VIEW_ITEM_END); ASSERTION (m_bAttached && other.m_bAttached);
if(other.m_pMsg->IsKindOf(RUNTIME_CLASS(CJob)) != m_pMsg->IsKindOf(RUNTIME_CLASS(CJob))) { ASSERTION_FAILURE; return 1; }
switch (item) { case MSG_VIEW_ITEM_ICON: case MSG_VIEW_ITEM_STATUS: dwRes = InitStatusStr(m_pMsg); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CViewRow::InitStatusStr"), dwRes); return 0; }
dwRes = other.InitStatusStr(other.m_pMsg); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CViewRow::InitStatusStr"), dwRes); return 0; }
return m_Strings[MSG_VIEW_ITEM_STATUS].Compare(other.m_Strings[MSG_VIEW_ITEM_STATUS]);
case MSG_VIEW_ITEM_EXTENDED_STATUS: dwRes = InitExtStatusStr(m_pMsg); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CViewRow::InitStatusStr"), dwRes); return 0; }
dwRes = other.InitExtStatusStr(other.m_pMsg); if(ERROR_SUCCESS != dwRes) { CALL_FAIL (GENERAL_ERR, TEXT("CViewRow::InitStatusStr"), dwRes); return 0; }
return m_Strings[item].Compare(other.m_Strings[item]);
case MSG_VIEW_ITEM_SERVER: return m_pMsg->GetServerName().Compare (other.m_pMsg->GetServerName());
case MSG_VIEW_ITEM_CSID: return m_pMsg->GetCSID().Compare (other.m_pMsg->GetCSID());
case MSG_VIEW_ITEM_TSID: return m_pMsg->GetTSID().Compare (other.m_pMsg->GetTSID());
case MSG_VIEW_ITEM_DEVICE: return m_pMsg->GetDevice().Compare (other.m_pMsg->GetDevice());
case MSG_VIEW_ITEM_CALLER_ID: return m_pMsg->GetCallerId().Compare (other.m_pMsg->GetCallerId());
case MSG_VIEW_ITEM_ROUTING_INFO: return m_pMsg->GetRoutingInfo().Compare (other.m_pMsg->GetRoutingInfo());
case MSG_VIEW_ITEM_DOC_NAME: return m_pMsg->GetDocName().Compare (other.m_pMsg->GetDocName());
case MSG_VIEW_ITEM_SUBJECT: return m_pMsg->GetSubject().Compare (other.m_pMsg->GetSubject());
case MSG_VIEW_ITEM_RECIPIENT_NAME: return m_pMsg->GetRecipientName().Compare (other.m_pMsg->GetRecipientName());
case MSG_VIEW_ITEM_RECIPIENT_NUMBER: return m_pMsg->GetRecipientNumber().Compare (other.m_pMsg->GetRecipientNumber());
case MSG_VIEW_ITEM_USER: return m_pMsg->GetUser().Compare (other.m_pMsg->GetUser());
case MSG_VIEW_ITEM_PRIORITY: return NUMERIC_CMP(m_pMsg->GetPriority(), other.m_pMsg->GetPriority());
case MSG_VIEW_ITEM_BILLING: return m_pMsg->GetBilling().Compare (other.m_pMsg->GetBilling());
case MSG_VIEW_ITEM_NUM_PAGES: return NUMERIC_CMP(m_pMsg->GetNumPages(), other.m_pMsg->GetNumPages());
case MSG_VIEW_ITEM_CURRENT_PAGE: return NUMERIC_CMP(m_pMsg->GetCurrentPage(), other.m_pMsg->GetCurrentPage());
case MSG_VIEW_ITEM_TRANSMISSION_START_TIME: return m_pMsg->GetTransmissionStartTime().Compare ( other.m_pMsg->GetTransmissionStartTime());
case MSG_VIEW_ITEM_SIZE: return NUMERIC_CMP(m_pMsg->GetSize(), other.m_pMsg->GetSize());
case MSG_VIEW_ITEM_RETRIES: return NUMERIC_CMP(m_pMsg->GetRetries(), other.m_pMsg->GetRetries());
case MSG_VIEW_ITEM_ID: return NUMERIC_CMP(m_pMsg->GetId(), other.m_pMsg->GetId());
case MSG_VIEW_ITEM_BROADCAST_ID: return NUMERIC_CMP(m_pMsg->GetBroadcastId(), other.m_pMsg->GetBroadcastId()); case MSG_VIEW_ITEM_ORIG_TIME: return m_pMsg->GetOrigTime().Compare ( other.m_pMsg->GetOrigTime());
case MSG_VIEW_ITEM_SUBMIT_TIME: return m_pMsg->GetSubmissionTime().Compare ( other.m_pMsg->GetSubmissionTime());
case MSG_VIEW_ITEM_SEND_TIME: return m_pMsg->GetScheduleTime().Compare ( other.m_pMsg->GetScheduleTime());
case MSG_VIEW_ITEM_SENDER_NAME: return m_pMsg->GetSenderName().Compare (other.m_pMsg->GetSenderName());
case MSG_VIEW_ITEM_SENDER_NUMBER: return m_pMsg->GetSenderNumber().Compare (other.m_pMsg->GetSenderNumber());
case MSG_VIEW_ITEM_TRANSMISSION_END_TIME: return m_pMsg->GetTransmissionEndTime().Compare ( other.m_pMsg->GetTransmissionEndTime());
case MSG_VIEW_ITEM_TRANSMISSION_DURATION: return m_pMsg->GetTransmissionDuration().Compare ( other.m_pMsg->GetTransmissionDuration());
default: ASSERTION_FAILURE; return 0; } ASSERTION_FAILURE; } // CViewRow::CompareByItem
|