Index: src/ch/StatusDlg.cpp =================================================================== diff -u -r8068e0c351055554340ac9755d1bc846893bf2b8 -rd9527df01ee91b35d9a5fdccb80ded25a9c8265f --- src/ch/StatusDlg.cpp (.../StatusDlg.cpp) (revision 8068e0c351055554340ac9755d1bc846893bf2b8) +++ src/ch/StatusDlg.cpp (.../StatusDlg.cpp) (revision d9527df01ee91b35d9a5fdccb80ded25a9c8265f) @@ -43,8 +43,8 @@ CStatusDlg::CStatusDlg(chcore::TTaskManager* pTasks, CWnd* pParent /*=nullptr*/) : ictranslate::CLanguageDialog(IDD_STATUS_DIALOG, pParent, &m_bLock), - m_spTaskMgrStats(new chcore::TTaskManagerStatsSnapshot), - m_pTasks(pTasks) + m_pTasks(pTasks), + m_spTaskMgrStats(new chcore::TTaskManagerStatsSnapshot) { RegisterStaticExControl(AfxGetInstanceHandle()); } @@ -97,6 +97,10 @@ PrepareResizableControls(); + // set dialog icon + HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); + SetIcon(hIcon, FALSE); + // get size of list ctrl CRect rcList; m_ctlStatusList.GetWindowRect(&rcList); @@ -158,22 +162,48 @@ RefreshStatus(); // select needed element + SelectInitialTask(); + + // refresh data timer + SetTimer(777, GetPropValue(GetConfig()), nullptr); + + return TRUE; +} + +void CStatusDlg::SelectInitialTask() +{ size_t stIndex = 0; + bool bSelected = false; while(stIndex < m_pTasks->GetSize()) { - if(m_pTasks->GetAt(stIndex) == m_spInitialSelection) + chcore::TTaskPtr spTask = m_pTasks->GetAt(stIndex); + if(m_spInitialSelection) { - m_ctlStatusList.SetItemState(boost::numeric_cast(stIndex), LVIS_SELECTED, LVIS_SELECTED); - break; + if(spTask == m_spInitialSelection) + { + m_ctlStatusList.SetItemState(boost::numeric_cast(stIndex), LVIS_SELECTED, LVIS_SELECTED); + bSelected = true; + break; + } } + else + { + if(spTask->IsRunning()) + { + m_ctlStatusList.SetItemState(boost::numeric_cast(stIndex), LVIS_SELECTED, LVIS_SELECTED); + bSelected = true; + break; + } + } stIndex++; } - // refresh data timer - SetTimer(777, GetPropValue(GetConfig()), nullptr); - - return TRUE; + if(!bSelected && m_pTasks->GetSize() > 0) + { + stIndex = m_pTasks->GetSize() - 1; + m_ctlStatusList.SetItemState(boost::numeric_cast(stIndex), LVIS_SELECTED, LVIS_SELECTED); + } } void CStatusDlg::EnableControls(bool bEnable) @@ -682,6 +712,9 @@ // apply state of the resume, cancel, ... buttons ApplyButtonsState(); + + // update taskbar progress + UpdateTaskBarProgress(); } void CStatusDlg::OnSelectionChanged(NMHDR* /*pNMHDR*/, LRESULT* /*pResult*/) @@ -1217,3 +1250,16 @@ return strTitleText; } + +void CStatusDlg::UpdateTaskBarProgress() const +{ + if(m_spTaskMgrStats->GetRunningTasks() != 0) + { + unsigned long long ullProgress = (unsigned long long)(m_spTaskMgrStats->GetCombinedProgress() * 100.0); + + m_taskBarProgress.SetState(m_hWnd, TBPF_NORMAL); + m_taskBarProgress.SetPosition(m_hWnd, ullProgress, 100); + } + else + m_taskBarProgress.SetState(m_hWnd, TBPF_NOPROGRESS); +}