Index: src/ch/MiniViewDlg.cpp =================================================================== diff -u -r4a3c74a38b00e7793d1e61107a824060e6c2ea95 -r8068e0c351055554340ac9755d1bc846893bf2b8 --- src/ch/MiniViewDlg.cpp (.../MiniViewDlg.cpp) (revision 4a3c74a38b00e7793d1e61107a824060e6c2ea95) +++ src/ch/MiniViewDlg.cpp (.../MiniViewDlg.cpp) (revision 8068e0c351055554340ac9755d1bc846893bf2b8) @@ -17,10 +17,15 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "stdafx.h" +#include "../libchcore/TTaskManager.h" +#include "../libchcore/TTask.h" #include "MiniViewDlg.h" #include "ch.h" #include #include "MemDC.h" +#include "../libchcore/TTaskManagerStatsSnapshot.h" +#include "CfgProperties.h" +#include "resource.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -30,7 +35,7 @@ #define WM_INITDATA WM_USER+5 -static const int sg_iMargin=7; +static const int sg_iMargin = 8; #define ROUND(val) ( ( (val)-static_cast(val) > 0.5 ) ? static_cast(val)+1 : static_cast(val) ) #undef ROUNDUP // from other module @@ -41,23 +46,19 @@ ///////////////////////////////////////////////////////////////////////////// // CMiniViewDlg dialog -CMiniViewDlg::CMiniViewDlg(CTaskArray* pArray, bool *pbHide, CWnd* pParent /*=NULL*/) - :ictranslate::CLanguageDialog(IDD_MINIVIEW_DIALOG, pParent, &m_bLock) +CMiniViewDlg::CMiniViewDlg(chcore::TTaskManager* pTaskManager, bool *pbHide, CWnd* pParent /*=nullptr*/) + :ictranslate::CLanguageDialog(IDD_MINIVIEW_DIALOG, pParent, &m_bLock), + m_iLastHeight(0), + m_bShown(false), + m_pTasks(pTaskManager), + m_bActive(false), + m_iIndex(-1), + m_pbHide(pbHide) { - //{{AFX_DATA_INIT(CMiniViewDlg) - // NOTE: the ClassWizard will add member initialization here - //}}AFX_DATA_INIT - - m_brBackground.CreateSolidBrush(GetSysColor(COLOR_3DFACE)); - m_iLastHeight=0; - m_bShown=false; - m_pTasks=pArray; - m_bActive=false; - m_iIndex=-1; - m_pbHide=pbHide; + COLORREF cr3DFace = GetSysColor(COLOR_3DFACE); + m_brBackground.CreateSolidBrush(cr3DFace); } - void CMiniViewDlg::DoDataExchange(CDataExchange* pDX) { CLanguageDialog::DoDataExchange(pDX); @@ -131,7 +132,7 @@ RefreshStatus(); - SetTimer(9843, (UINT)GetConfig().get_signed_num(PP_MVREFRESHINTERVAL), NULL); + SetTimer(9843, GetPropValue(GetConfig()), nullptr); } CLanguageDialog::OnTimer(nIDEvent); @@ -141,10 +142,10 @@ { // set listbox size CRect rcList; - m_ctlStatus.GetClientRect(&rcList); + m_ctlStatus.GetWindowRect(&rcList); if (nHeight == 0) - nHeight=rcList.Height(); + nHeight = rcList.Height(); // don't do anything if height doesn't changed if (nHeight == m_iLastHeight && !bInitial) @@ -153,56 +154,87 @@ // remember height m_iLastHeight = nHeight; - // size of a dialog and screen - CRect rCLanguageDialog, rcScreen; - GetWindowRect(&rCLanguageDialog); - SystemParametersInfo(SPI_GETWORKAREA, 0, &rcScreen, 0); + CRect rcNewDlgPos(rcList); + AdjustWindowRectEx(&rcNewDlgPos, GetStyle(), FALSE, GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE)); - // place listbox in the best place - m_ctlStatus.SetWindowPos(NULL, sg_iMargin, 0/*sg_iMargin*/, 0, 0, SWP_NOZORDER | SWP_NOSIZE); + // use dynamic margin + int iWidth = rcNewDlgPos.Width(); + int iHeight = rcNewDlgPos.Height(); - int iWidth=rcList.Width()+2*sg_iMargin+2*GetSystemMetrics(SM_CXDLGFRAME); - int iHeight=rcList.Height()+1*sg_iMargin+2*GetSystemMetrics(SM_CYDLGFRAME)+GetSystemMetrics(SM_CYSMCAPTION); - - if (bInitial || (rCLanguageDialog.left == rcScreen.right-rCLanguageDialog.Width() - && rCLanguageDialog.top == rcScreen.bottom-rCLanguageDialog.Height()) ) + int iListXOffset = 0; + int iXMargin = (rcNewDlgPos.Width() - rcList.Width()) / 2; + if(iXMargin < sg_iMargin) { - SetWindowPos(&wndTopMost, rcScreen.right-iWidth, rcScreen.bottom-iHeight, iWidth, iHeight, - 0); + iListXOffset = (sg_iMargin - iXMargin); + iWidth += (sg_iMargin - iXMargin) * 2; } + + int iYMargin = rcNewDlgPos.bottom - rcList.bottom; + if(iYMargin < sg_iMargin) + iHeight += (sg_iMargin - iYMargin); + + // place listbox in the best place + m_ctlStatus.SetWindowPos(nullptr, iListXOffset, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE); + + // size of a dialog and screen + CRect rcDialog, rcScreen; + GetWindowRect(&rcDialog); + SystemParametersInfo(SPI_GETWORKAREA, 0, &rcScreen, 0); + + bool bIsGluedToScreenEdge = (rcDialog.left == rcScreen.right-rcDialog.Width() + && rcDialog.top == rcScreen.bottom-rcDialog.Height()); + + if (bInitial || bIsGluedToScreenEdge) + SetWindowPos(&wndTopMost, rcScreen.right - iWidth, rcScreen.bottom - iHeight, iWidth, iHeight, 0); else SetWindowPos(&wndTopMost, 0, 0, iWidth, iHeight, SWP_NOMOVE); } void CMiniViewDlg::RefreshStatus() { + if(!m_pTasks) + return; + + chcore::TTaskManagerStatsSnapshotPtr spTaskMgrStats(new chcore::TTaskManagerStatsSnapshot); + + m_pTasks->GetStatsSnapshot(spTaskMgrStats); + int index=0; - _PROGRESSITEM_* pItem=NULL; + _PROGRESSITEM_* pItem=nullptr; - if(GetConfig().get_bool(PP_MVSHOWSINGLETASKS)) + if(GetPropValue(GetConfig())) { - for(size_t stIndex = 0; stIndex < m_pTasks->GetSize(); ++stIndex) + size_t stTasksCount = spTaskMgrStats->GetTaskStatsCount(); + for(size_t stIndex = 0; stIndex < stTasksCount; ++stIndex) { - CTaskPtr spTask = m_pTasks->GetAt(stIndex); - spTask->GetMiniSnapshot(&m_tMiniDisplayData); + chcore::TTaskStatsSnapshotPtr spTaskStats = spTaskMgrStats->GetTaskStatsAt(stIndex); + chcore::ETaskCurrentState eTaskState = spTaskStats->GetTaskState(); - if((m_tMiniDisplayData.m_uiStatus & ST_STEP_MASK) != ST_FINISHED && (m_tMiniDisplayData.m_uiStatus & ST_STEP_MASK) != ST_CANCELLED) + if(eTaskState != chcore::eTaskState_Finished && eTaskState != chcore::eTaskState_Cancelled && eTaskState != chcore::eTaskState_LoadError) { pItem = m_ctlStatus.GetItemAddress(index++); // load - if ((m_tMiniDisplayData.m_uiStatus & ST_WORKING_MASK) == ST_ERROR) + if(eTaskState == chcore::eTaskState_Error) pItem->m_crColor=RGB(255, 0, 0); - else if ((m_tMiniDisplayData.m_uiStatus & ST_WORKING_MASK) == ST_PAUSED) + else if(eTaskState == chcore::eTaskState_Paused) pItem->m_crColor=RGB(255, 255, 0); - else if ((m_tMiniDisplayData.m_uiStatus & ST_WAITING_MASK) == ST_WAITING) - pItem->m_crColor=RGB(50, 50, 50); + else if(eTaskState == chcore::eTaskState_Waiting) + pItem->m_crColor=RGB(0, 0, 255); else pItem->m_crColor=RGB(0, 255, 0); - - pItem->m_strText = m_tMiniDisplayData.m_strPath; - pItem->m_uiPos=m_tMiniDisplayData.m_nPercent; - pItem->m_spTask = spTask; + + chcore::TString strPath; + chcore::TSubTaskStatsSnapshotPtr spSubtaskStats = spTaskStats->GetSubTasksStats().GetCurrentSubTaskSnapshot(); + if(spSubtaskStats) + strPath = spSubtaskStats->GetCurrentPath(); + + if(strPath.IsEmpty()) + strPath = GetResManager().LoadString(IDS_NONEINPUTFILE_STRING); + + pItem->m_strText = strPath.c_str(); + pItem->m_uiPos = boost::numeric_cast(spTaskStats->GetCombinedProgress() * 100.0); + pItem->m_tTaskID = spTaskStats->GetTaskID(); } } } @@ -213,10 +245,10 @@ { if (m_bShown) { - if (GetConfig().get_bool(PP_MVAUTOHIDEWHENEMPTY) || *m_pbHide) + if (GetPropValue(GetConfig()) || *m_pbHide) HideWindow(); } - else if (!GetConfig().get_bool(PP_MVAUTOHIDEWHENEMPTY) && !(*m_pbHide)) + else if (!GetPropValue(GetConfig()) && !(*m_pbHide)) { // need to be visible ShowWindow(); @@ -244,14 +276,14 @@ pItem=m_ctlStatus.GetItemAddress(index++); pItem->m_crColor=GetSysColor(COLOR_HIGHLIGHT); pItem->m_strText=GetResManager().LoadString(IDS_MINIVIEWALL_STRING); - pItem->m_uiPos=m_pTasks->GetPercent(); - pItem->m_spTask.reset(); + pItem->m_uiPos = boost::numeric_cast(spTaskMgrStats->GetCombinedProgress() * 100.0); + pItem->m_tTaskID = chcore::NoTaskID; // get rid of the rest - m_ctlStatus.SetSmoothProgress(GetConfig().get_bool(PP_MVUSESMOOTHPROGRESS)); + m_ctlStatus.SetSmoothProgress(GetPropValue(GetConfig())); m_ctlStatus.UpdateItems(index, true); - m_ctlStatus.SetShowCaptions(GetConfig().get_bool(PP_MVSHOWFILENAMES)); + m_ctlStatus.SetShowCaptions(GetPropValue(GetConfig())); // calc size RecalcSize(0, bInitial); @@ -268,7 +300,7 @@ RefreshStatus(); // set refresh timer - SetTimer(9843, (UINT)GetConfig().get_signed_num(PP_MVREFRESHINTERVAL), NULL); + SetTimer(9843, GetPropValue(GetConfig()), nullptr); return static_cast(0); } @@ -303,7 +335,7 @@ pen2.CreatePen(PS_SOLID, 1, GetSysColor(COLOR_3DFACE)); ncdc.SelectObject(&pen); - ncdc.SelectStockObject(NULL_BRUSH); + ncdc.SelectObject(m_brBackground); ncdc.Rectangle(&rcWindow); @@ -406,7 +438,7 @@ if (iSel == LB_ERR || (size_t)iSel >= pDlg->m_ctlStatus.m_vItems.size()) return; - CTaskPtr spTask = pDlg->m_ctlStatus.m_vItems.at(iSel)->m_spTask; + chcore::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID); if(spTask) spTask->PauseProcessing(); else @@ -513,10 +545,11 @@ int iSel=pDlg->m_ctlStatus.GetCurSel(); if (iSel == LB_ERR || (size_t)iSel >= pDlg->m_ctlStatus.m_vItems.size()) return; - CTaskPtr spTask = pDlg->m_ctlStatus.m_vItems.at(iSel)->m_spTask; + + chcore::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID); if (spTask) { - if(spTask->GetStatus(ST_WAITING_MASK) & ST_WAITING) + if(spTask->GetTaskState() == chcore::eTaskState_Waiting) spTask->SetForceFlag(true); else spTask->ResumeProcessing(); @@ -557,7 +590,8 @@ int iSel=pDlg->m_ctlStatus.GetCurSel(); if (iSel == LB_ERR || (size_t)iSel >= pDlg->m_ctlStatus.m_vItems.size()) return; - CTaskPtr spTask = pDlg->m_ctlStatus.m_vItems.at(iSel)->m_spTask; + + chcore::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID); if(spTask) spTask->CancelProcessing(); else @@ -611,7 +645,8 @@ int iSel=pDlg->m_ctlStatus.GetCurSel(); if (iSel == LB_ERR || (size_t)iSel >= pDlg->m_ctlStatus.m_vItems.size()) return; - CTaskPtr spTask = pDlg->m_ctlStatus.m_vItems.at(iSel)->m_spTask; + + chcore::TTaskPtr spTask = pDlg->m_pTasks->GetTaskByTaskID(pDlg->m_ctlStatus.m_vItems.at(iSel)->m_tTaskID); if(spTask) spTask->RestartProcessing(); else @@ -624,7 +659,7 @@ void CMiniViewDlg::OnSelchangeProgressList() { RefreshStatus(); - RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_FRAME); + RedrawWindow(nullptr, nullptr, RDW_INVALIDATE | RDW_FRAME); // PostMessage(WM_NCPAINT); } @@ -652,8 +687,8 @@ m_iIndex=i; m_bdButtons[i].bPressed=true; SetCapture(); - RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_FRAME); -// PostMessage(WM_NCPAINT, NULL, NULL); + RedrawWindow(nullptr, nullptr, RDW_INVALIDATE | RDW_FRAME); +// PostMessage(WM_NCPAINT, nullptr, nullptr); return; } } @@ -671,9 +706,9 @@ if (m_iIndex != -1 && m_bdButtons[m_iIndex].bPressed) { m_bdButtons[m_iIndex].bPressed=false; - RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_FRAME); -// PostMessage(WM_NCPAINT, NULL, NULL); - m_bdButtons[m_iIndex].pfnCallbackFunc(this, MSG_ONCLICK, &m_bdButtons[m_iIndex], NULL); + RedrawWindow(nullptr, nullptr, RDW_INVALIDATE | RDW_FRAME); +// PostMessage(WM_NCPAINT, nullptr, nullptr); + m_bdButtons[m_iIndex].pfnCallbackFunc(this, MSG_ONCLICK, &m_bdButtons[m_iIndex], nullptr); bProcessed=true; } @@ -688,21 +723,21 @@ BOOL CMiniViewDlg::OnNcActivate(BOOL bActive) { m_bActive=bActive != 0; - RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_FRAME); + RedrawWindow(nullptr, nullptr, RDW_INVALIDATE | RDW_FRAME); // PostMessage(WM_NCPAINT); return TRUE/*bResult*/; } void CMiniViewDlg::OnSetfocusProgressList() { - RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_FRAME); + RedrawWindow(nullptr, nullptr, RDW_INVALIDATE | RDW_FRAME); // PostMessage(WM_NCPAINT); } void CMiniViewDlg::OnSelcancelProgressList() { RefreshStatus(); - RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_FRAME); + RedrawWindow(nullptr, nullptr, RDW_INVALIDATE | RDW_FRAME); // PostMessage(WM_NCPAINT); } @@ -712,23 +747,22 @@ if (m_iIndex != -1) { - // popraw wsp��rz�dne punktu point.x+=GetSystemMetrics(SM_CYDLGFRAME); point.y+=GetSystemMetrics(SM_CYSMCAPTION)+GetSystemMetrics(SM_CYDLGFRAME); if (m_bdButtons[m_iIndex].rcButton.PtInRect(point)) { if (!m_bdButtons[m_iIndex].bPressed) { m_bdButtons[m_iIndex].bPressed=true; - SendMessage(WM_NCPAINT, NULL, NULL); + SendMessage(WM_NCPAINT); } } else { if (m_bdButtons[m_iIndex].bPressed) { m_bdButtons[m_iIndex].bPressed=false; - SendMessage(WM_NCPAINT, NULL, NULL); + SendMessage(WM_NCPAINT); } } } @@ -749,41 +783,6 @@ if(!IsWindowVisible()) return; - // remember pos of listbox - CRect rcList, rcWindow, rcClient; - m_ctlStatus.GetWindowRect(&rcList); - ScreenToClient(&rcList); - GetWindowRect(&rcWindow); - GetClientRect(&rcClient); - - // change window size - CString strTitle; - GetWindowText(strTitle); - - CClientDC dc(this); - - NONCLIENTMETRICS ncm; - memset(&ncm, 0, sizeof(NONCLIENTMETRICS)); - ncm.cbSize=sizeof(NONCLIENTMETRICS); - if(!SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0)) - { - BOOST_ASSERT(false); // function call failed - return; - } - - CFont font; - font.CreateFontIndirect(&ncm.lfSmCaptionFont); - dc.SelectObject(&font); - - CSize sSize=dc.GetOutputTextExtent(strTitle); - - int iEdgeWidth=1; - int iBoxWidth=static_cast(static_cast(((9+2)-2*iEdgeWidth))*(2.0/3.0))+1; - int iWidth=BTN_COUNT*(GetSystemMetrics(SM_CYSMCAPTION))+sSize.cx+2*GetSystemMetrics(SM_CXDLGFRAME)+18; - - // change pos of listbox - m_ctlStatus.SetWindowPos(NULL, 0, 0, ROUNDUP(iWidth-2*sg_iMargin, iBoxWidth)+2*iEdgeWidth, rcList.Height(), SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE); - RecalcSize(0, true); } @@ -805,11 +804,8 @@ if(iSel == LB_ERR || (size_t)iSel >= m_ctlStatus.m_vItems.size()) return; - CTaskPtr spTask = m_ctlStatus.m_vItems.at(iSel)->m_spTask; - if(spTask) - GetParent()->PostMessage(WM_MINIVIEWDBLCLK, 0, (LPARAM)spTask->GetSessionUniqueID()); - else - GetParent()->PostMessage(WM_MINIVIEWDBLCLK, 0, (LPARAM)NO_TASK_SESSION_UNIQUE_ID); + chcore::taskid_t tTaskID = m_ctlStatus.m_vItems.at(iSel)->m_tTaskID; + GetParent()->PostMessage(WM_MINIVIEWDBLCLK, 0, boost::numeric_cast(tTaskID)); } void CMiniViewDlg::OnLanguageChanged()