00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "Downloads_Log.h"
00009 #include "DownloadsWnd.h"
00010
00011 #ifdef _DEBUG
00012 #define new DEBUG_NEW
00013 #undef THIS_FILE
00014 static char THIS_FILE[] = __FILE__;
00015 #endif
00016
00017 CDownloads_Log::CDownloads_Log()
00018 {
00019 m_bAutoScroll = TRUE;
00020 m_pActiveDownload = NULL;
00021 }
00022
00023 CDownloads_Log::~CDownloads_Log()
00024 {
00025 }
00026
00027 BEGIN_MESSAGE_MAP(CDownloads_Log, CListCtrlEx)
00028
00029 ON_WM_RBUTTONDOWN()
00030 ON_COMMAND(ID_AUTOSCROLL, OnAutoscroll)
00031 ON_COMMAND(ID_CLEAR, OnClear)
00032 ON_WM_DRAWITEM()
00033 ON_WM_MEASUREITEM()
00034 ON_COMMAND(ID_COPY_TO_CB, OnCopyToCb)
00035
00036 END_MESSAGE_MAP()
00037
00038 BOOL CDownloads_Log::Create(CWnd *pParent)
00039 {
00040 CRect rc (0, 0, 50, 50);
00041
00042 if (FALSE == CListCtrlEx::Create (LVS_REPORT|LVS_OWNERDRAWFIXED|LVS_NOSORTHEADER,
00043 rc, pParent, 0x56789))
00044 return FALSE;
00045
00046 SetExtendedStyle (LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP);
00047
00048 InsertColumn (0, "Time", LVCFMT_LEFT, 85, 0);
00049 InsertColumn (1, "Date", LVCFMT_LEFT, 70, 0);
00050 InsertColumn (2, "Information", LVCFMT_LEFT, 300, 0);
00051
00052 m_images.Create (16, 15, ILC_COLOR24 | ILC_MASK, 6, 1);
00053 CBitmap bmp;
00054 bmp.Attach (SBMP (IDB_LOGSTATES));
00055 m_images.Add (&bmp, RGB (255, 0, 255));
00056 SetImageList (&m_images, LVSIL_SMALL);
00057
00058 ReadState ("DownloadsLog");
00059
00060 ShowWindow (SW_SHOW);
00061
00062 return TRUE;
00063 }
00064
00065 void CDownloads_Log::AddRecord(fsDownloadEvents *event)
00066 {
00067 SYSTEMTIME time;
00068 CHAR strTime [1000], strDate [1000];
00069
00070 FileTimeToSystemTime (&event->timeEvent, &time);
00071
00072 SystemTimeToStr (&time, strDate, strTime);
00073
00074 char szEv [10000];
00075 LPCSTR pszEvent = event->strEvent;
00076 LPCSTR pszEv2 = pszEvent;
00077
00078 int iItem = 0;
00079 BOOL bFirst = TRUE;
00080
00081 while (pszEvent)
00082 {
00083
00084 pszEvent = strstr (pszEvent, "\r\n");
00085 if (pszEvent)
00086 {
00087 strncpy (szEv, pszEv2, pszEvent - pszEv2);
00088 szEv [pszEvent - pszEv2] = 0;
00089 if (*szEv)
00090 {
00091 iItem = AddItem (bFirst ? strTime : "", event->clrBg, event->clrText, bFirst ? event->iImage : -1);
00092 SetItemText (iItem, 1, bFirst ? strDate : "");
00093 SetItemText (iItem, 2, szEv);
00094 }
00095
00096 pszEvent += 2;
00097 pszEv2 = pszEvent;
00098 bFirst = FALSE;
00099 }
00100 }
00101
00102 if (*pszEv2)
00103 {
00104 iItem = AddItem (bFirst ? strTime : "", event->clrBg, event->clrText, bFirst ? event->iImage : -1);
00105 if (bFirst)
00106 SetItemText (iItem, 1, strDate);
00107 SetItemText (iItem, 2, pszEv2);
00108 }
00109
00110 if (m_bAutoScroll)
00111 EnsureVisible (iItem, FALSE);
00112 }
00113
00114 void CDownloads_Log::SetActiveDownload(vmsDownloadSmartPtr dld)
00115 {
00116 DeleteAllItems ();
00117
00118 m_pActiveDownload = dld;
00119
00120 if (dld == NULL)
00121 return;
00122
00123 int cEvs = dld->vEvents.size ();
00124
00125 BOOL b = cEvs > 100 && IsWindowVisible ();
00126 if (b)
00127 ShowWindow (SW_HIDE);
00128
00129 try {
00130
00131 for (int i = 0; i < cEvs; i++)
00132 AddRecord (&dld->vEvents [i]);
00133 }catch (...){}
00134
00135 if (b)
00136 ShowWindow (SW_SHOW);
00137 }
00138
00139 void CDownloads_Log::OnRClick()
00140 {
00141 CMenu menu;
00142 menu.LoadMenu (IDM_LOG);
00143 CMenu *pPopup = menu.GetSubMenu (0);
00144 ApplyLanguageToMenu (&menu);
00145
00146 if (m_bAutoScroll)
00147 pPopup->CheckMenuItem (ID_AUTOSCROLL, MF_CHECKED | MF_BYCOMMAND);
00148
00149 if (m_pActiveDownload == NULL || m_pActiveDownload->vEvents.size () == 0)
00150 {
00151 pPopup->EnableMenuItem (ID_CLEAR, MF_BYCOMMAND | MF_GRAYED);
00152 pPopup->EnableMenuItem (ID_COPY_TO_CB, MF_BYCOMMAND | MF_GRAYED);
00153 }
00154
00155 ClientToScreen (&m_rbPt);
00156
00157 m_odmenu.Attach (&menu, FALSE);
00158 pPopup->TrackPopupMenu (TPM_RIGHTBUTTON | TPM_TOPALIGN | TPM_LEFTALIGN, m_rbPt.x, m_rbPt.y, this);
00159 m_odmenu.Detach ();
00160
00161 menu.DestroyMenu ();
00162 }
00163
00164 void CDownloads_Log::OnRButtonDown(UINT nFlags, CPoint point)
00165 {
00166 m_rbPt = point;
00167
00168 CListCtrlEx::OnRButtonDown(nFlags, point);
00169 }
00170
00171 void CDownloads_Log::OnAutoscroll()
00172 {
00173 m_bAutoScroll = !m_bAutoScroll;
00174 }
00175
00176 void CDownloads_Log::OnClear()
00177 {
00178 m_pActiveDownload->vEvents.clear ();
00179 DeleteAllItems ();
00180 }
00181
00182 void CDownloads_Log::OnDrawItem(int , LPDRAWITEMSTRUCT lpDrawItemStruct)
00183 {
00184 m_odmenu.OnDrawItem (lpDrawItemStruct);
00185 }
00186
00187 void CDownloads_Log::OnMeasureItem(int , LPMEASUREITEMSTRUCT lpMeasureItemStruct)
00188 {
00189 m_odmenu.OnMeasureItem (lpMeasureItemStruct);
00190 }
00191
00192 void CDownloads_Log::ApplyLanguage()
00193 {
00194 SetColumnText (0, LS (L_TIME));
00195 SetColumnText (1, LS (L_DATE));
00196 SetColumnText (2, LS (L_INFORMATION));
00197 }
00198
00199 void CDownloads_Log::ApplyLanguageToMenu(CMenu *menu)
00200 {
00201 menu->ModifyMenu (ID_CLEAR, MF_BYCOMMAND|MF_STRING, ID_CLEAR, LS (L_CLEAR));
00202 menu->ModifyMenu (ID_COPY_TO_CB, MF_BYCOMMAND|MF_STRING, ID_COPY_TO_CB, LS (L_COPYTOCB));
00203 menu->ModifyMenu (ID_AUTOSCROLL, MF_BYCOMMAND|MF_STRING, ID_AUTOSCROLL, LS (L_AUTOSCROLL));
00204 }
00205
00206 void CDownloads_Log::OnKeyDown(WORD wVK)
00207 {
00208 switch (wVK)
00209 {
00210 case VK_APPS:
00211 CalcCoordsForCurSel ();
00212 OnRClick ();
00213 break;
00214 }
00215 }
00216
00217 void CDownloads_Log::CalcCoordsForCurSel()
00218 {
00219 int iCurSel = GetSelectionMark ();
00220 if (iCurSel == -1)
00221 {
00222 POSITION pos = GetFirstSelectedItemPosition ();
00223 if (pos)
00224 iCurSel = GetNextSelectedItem (pos);
00225 }
00226
00227 if (iCurSel != -1)
00228 {
00229 RECT rc;
00230 GetItemRect (iCurSel, &rc, LVIR_BOUNDS);
00231 m_rbPt.x = rc.left + 30;
00232 m_rbPt.y = rc.top;
00233 }
00234 else
00235 m_rbPt.x = m_rbPt.y = 30;
00236 }
00237
00238 void CDownloads_Log::OnForceUpdate()
00239 {
00240 SetActiveDownload (m_pActiveDownload);
00241 }
00242
00243 void CDownloads_Log::OnCopyToCb()
00244 {
00245 SYSTEMTIME time;
00246 CHAR strTime [1000], strDate [1000];
00247
00248 CString strText;
00249
00250 for (int i = 0; i < m_pActiveDownload->vEvents.size (); i++)
00251 {
00252 fsDownloadEvents* event = &m_pActiveDownload->vEvents [i];
00253
00254 FileTimeToSystemTime (&event->timeEvent, &time);
00255 SystemTimeToStr (&time, strDate, strTime);
00256
00257 strText += strTime; strText += ' ';
00258 strText += strDate; strText += ' ';
00259 strText += event->strEvent;
00260 strText += "\r\n";
00261 }
00262
00263 _ClipbrdMgr.Text (strText);
00264 }