Clone
ixen <ixen@copyhandler.com>
committed
on 30 Jun 16
Refactoring: changed the member variable to a local variable (might solve unreproducible crash in miniview window).
LoggerImprovements + 5 more
src/ch/MiniViewDlg.cpp (+13 -13)
27 27
28 28 #ifdef _DEBUG
29 29 #define new DEBUG_NEW
30 30 #undef THIS_FILE
31 31 static char THIS_FILE[] = __FILE__;
32 32 #endif
33 33
34 34 #define WM_INITDATA                             WM_USER+5
35 35
36 36 static const int sg_iMargin = 8;
37 37
38 38 #define ROUND(val) ( ( (val)-static_cast<int>(val) > 0.5 ) ? static_cast<int>(val)+1 : static_cast<int>(val) )
39 39 #undef ROUNDUP  // from other module
40 40 #define ROUNDUP(val, to) ( (static_cast<int>((val)/(to))+1 )*(to) )
41 41
42 42 bool CMiniViewDlg::m_bLock=false;
43 43
44 44 /////////////////////////////////////////////////////////////////////////////
45 45 // CMiniViewDlg dialog
46 46
47   CMiniViewDlg::CMiniViewDlg(chcore::TTaskManager* pArray, bool *pbHide, CWnd* pParent /*=NULL*/)
  47 CMiniViewDlg::CMiniViewDlg(chcore::TTaskManager* pTaskManager, bool *pbHide, CWnd* pParent /*=NULL*/)
48 48         :ictranslate::CLanguageDialog(IDD_MINIVIEW_DIALOG, pParent, &m_bLock),
49           m_spTaskMgrStats(new chcore::TTaskManagerStatsSnapshot)
  49         m_iLastHeight(0),
  50         m_bShown(false),
  51         m_pTasks(pTaskManager),
  52         m_bActive(false),
  53         m_iIndex(-1),
  54         m_pbHide(pbHide)
50 55 {
51 56         COLORREF cr3DFace = GetSysColor(COLOR_3DFACE);
52 57         m_brBackground.CreateSolidBrush(cr3DFace);
53           m_iLastHeight=0;
54           m_bShown=false;
55           m_pTasks=pArray;
56           m_bActive=false;
57           m_iIndex=-1;
58           m_pbHide=pbHide;
59 58 }
60 59
61  
62 60 void CMiniViewDlg::DoDataExchange(CDataExchange* pDX)
63 61 {
64 62         CLanguageDialog::DoDataExchange(pDX);
65 63         //{{AFX_DATA_MAP(CMiniViewDlg)
66 64         DDX_Control(pDX, IDC_PROGRESS_LIST, m_ctlStatus);
67 65         //}}AFX_DATA_MAP
68 66 }
69 67
70 68 BEGIN_MESSAGE_MAP(CMiniViewDlg,ictranslate::CLanguageDialog)
71 69         //{{AFX_MSG_MAP(CMiniViewDlg)
72 70         ON_WM_CTLCOLOR()
73 71         ON_WM_TIMER()
74 72         ON_LBN_SELCHANGE(IDC_PROGRESS_LIST, OnSelchangeProgressList)
75 73         ON_WM_NCLBUTTONDOWN()
76 74         ON_WM_LBUTTONUP()
77 75         ON_WM_NCPAINT()
78 76         ON_WM_NCACTIVATE()
79 77         ON_LBN_SETFOCUS(IDC_PROGRESS_LIST, OnSetfocusProgressList)
80 78         ON_LBN_SELCANCEL(IDC_PROGRESS_LIST, OnSelcancelProgressList)
81 79         ON_WM_MOUSEMOVE()
 
178 176
179 177         // size of a dialog and screen
180 178         CRect rcDialog, rcScreen;
181 179         GetWindowRect(&rcDialog);
182 180         SystemParametersInfo(SPI_GETWORKAREA, 0, &rcScreen, 0);
183 181
184 182         bool bIsGluedToScreenEdge = (rcDialog.left == rcScreen.right-rcDialog.Width()
185 183                 && rcDialog.top == rcScreen.bottom-rcDialog.Height());
186 184
187 185         if (bInitial || bIsGluedToScreenEdge)
188 186                 SetWindowPos(&wndTopMost, rcScreen.right - iWidth, rcScreen.bottom - iHeight, iWidth, iHeight, 0);
189 187         else
190 188                 SetWindowPos(&wndTopMost, 0, 0, iWidth, iHeight, SWP_NOMOVE);
191 189 }
192 190
193 191 void CMiniViewDlg::RefreshStatus()
194 192 {
195 193         if(!m_pTasks)
196 194                 return;
197 195
198           m_pTasks->GetStatsSnapshot(m_spTaskMgrStats);
  196         chcore::TTaskManagerStatsSnapshotPtr spTaskMgrStats(new chcore::TTaskManagerStatsSnapshot);
199 197
  198         m_pTasks->GetStatsSnapshot(spTaskMgrStats);
  199
200 200         int index=0;
201 201         _PROGRESSITEM_* pItem=NULL;
202 202
203 203         if(GetPropValue<PP_MVSHOWSINGLETASKS>(GetConfig()))
204 204         {
205                   size_t stTasksCount = m_spTaskMgrStats->GetTaskStatsCount();
  205                 size_t stTasksCount = spTaskMgrStats->GetTaskStatsCount();
206 206                 for(size_t stIndex = 0; stIndex < stTasksCount; ++stIndex)
207 207                 {
208                           chcore::TTaskStatsSnapshotPtr spTaskStats = m_spTaskMgrStats->GetTaskStatsAt(stIndex);
  208                         chcore::TTaskStatsSnapshotPtr spTaskStats = spTaskMgrStats->GetTaskStatsAt(stIndex);
209 209                         chcore::ETaskCurrentState eTaskState = spTaskStats->GetTaskState();
210 210
211 211                         if(eTaskState != chcore::eTaskState_Finished && eTaskState != chcore::eTaskState_Cancelled && eTaskState != chcore::eTaskState_LoadError)
212 212                         {
213 213                                 pItem = m_ctlStatus.GetItemAddress(index++);
214 214
215 215                                 // load
216 216                                 if(eTaskState == chcore::eTaskState_Error)
217 217                                         pItem->m_crColor=RGB(255, 0, 0);
218 218                                 else if(eTaskState == chcore::eTaskState_Paused)
219 219                                         pItem->m_crColor=RGB(255, 255, 0);
220 220                                 else if(eTaskState == chcore::eTaskState_Waiting)
221 221                                         pItem->m_crColor=RGB(0, 0, 255);
222 222                                 else
223 223                                         pItem->m_crColor=RGB(0, 255, 0);
224 224
225 225                                 chcore::TString strPath;
226 226                                 chcore::TSubTaskStatsSnapshotPtr spSubtaskStats = spTaskStats->GetSubTasksStats().GetCurrentSubTaskSnapshot();
227 227                                 if(spSubtaskStats)
228 228                                         strPath = spSubtaskStats->GetCurrentPath();
 
257 257         {
258 258                 if (!m_bShown)
259 259                 {
260 260                         if (!(*m_pbHide))
261 261                         {
262 262                                 ShowWindow();
263 263                                 bInitial=true;
264 264                         }
265 265                 }
266 266                 else
267 267                 {
268 268                         if (*m_pbHide)
269 269                                 HideWindow();
270 270                 }
271 271         }
272 272
273 273         // add all state
274 274         pItem=m_ctlStatus.GetItemAddress(index++);
275 275         pItem->m_crColor=GetSysColor(COLOR_HIGHLIGHT);
276 276         pItem->m_strText=GetResManager().LoadString(IDS_MINIVIEWALL_STRING);
277           pItem->m_uiPos = boost::numeric_cast<int>(m_spTaskMgrStats->GetCombinedProgress() * 100.0);
  277         pItem->m_uiPos = boost::numeric_cast<int>(spTaskMgrStats->GetCombinedProgress() * 100.0);
278 278         pItem->m_tTaskID = chcore::NoTaskID;
279 279
280 280         // get rid of the rest
281 281         m_ctlStatus.SetSmoothProgress(GetPropValue<PP_MVUSESMOOTHPROGRESS>(GetConfig()));
282 282         m_ctlStatus.UpdateItems(index, true);
283 283         
284 284         m_ctlStatus.SetShowCaptions(GetPropValue<PP_MVSHOWFILENAMES>(GetConfig()));
285 285
286 286         // calc size
287 287         RecalcSize(0, bInitial);
288 288 }
289 289
290 290 LRESULT CMiniViewDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
291 291 {
292 292         if (message == WM_INITDATA)
293 293         {
294 294                 // listbox with progress pseudocontrols
295 295                 m_ctlStatus.Init();
296 296                 
297 297                 // refresh