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