Index: src/ch/MainWnd.cpp =================================================================== diff -u -rbeeac49d2e0888993bd231a4e5863c7f0741e154 -rc435ab507c8b8280264188b49e9ada56d46c0261 --- src/ch/MainWnd.cpp (.../MainWnd.cpp) (revision beeac49d2e0888993bd231a4e5863c7f0741e154) +++ src/ch/MainWnd.cpp (.../MainWnd.cpp) (revision c435ab507c8b8280264188b49e9ada56d46c0261) @@ -1,5 +1,5 @@ /*************************************************************************** -* Copyright (C) 2001-2008 by J�zef Starosczyk * +* Copyright (C) 2001-2008 by Jozef Starosczyk * * ixen@copyhandler.com * * * * This program is free software; you can redistribute it and/or modify * @@ -35,6 +35,8 @@ #include "StatusDlg.h" #include "ClipboardMonitor.h" +#include + #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE @@ -331,10 +333,10 @@ ///////////////////////////////////////////////////////////////////////////// // CMainWnd/CTrayIcon menu message handlers -void CMainWnd::ShowStatusWindow(const CTask *pSelect) +void CMainWnd::ShowStatusWindow(const CTaskPtr& spSelect) { m_pdlgStatus=new CStatusDlg(&m_tasks, this); // self deleting - m_pdlgStatus->m_pInitialSelection=pSelect; + m_pdlgStatus->m_spInitialSelection = spSelect; m_pdlgStatus->m_bLockInstance=true; m_pdlgStatus->m_bAutoDelete=true; m_pdlgStatus->Create(); @@ -389,9 +391,9 @@ KillTimer(3245); if (GetConfig().get_bool(PP_STATUSAUTOREMOVEFINISHED)) { - int iSize=m_tasks.GetSize(); + size_t stSize = m_tasks.GetSize(); m_tasks.RemoveAllFinished(); - if (m_tasks.GetSize() != iSize && m_pdlgStatus && m_pdlgStatus->m_bLock && IsWindow(m_pdlgStatus->m_hWnd)) + if(m_tasks.GetSize() != stSize && m_pdlgStatus && m_pdlgStatus->m_bLock && IsWindow(m_pdlgStatus->m_hWnd)) m_pdlgStatus->SendMessage(WM_UPDATESTATUS); } @@ -400,22 +402,7 @@ case 8743: { // wait state handling section - CTask* pTask; - if (GetConfig().get_signed_num(PP_CMLIMITMAXOPERATIONS) == 0 || m_tasks.GetOperationsPending() < (UINT)GetConfig().get_signed_num(PP_CMLIMITMAXOPERATIONS)) - { - for (int i=0;iGetStatus(ST_WAITING_MASK) & ST_WAITING && (GetConfig().get_signed_num(PP_CMLIMITMAXOPERATIONS) == 0 || m_tasks.GetOperationsPending() < (UINT)GetConfig().get_signed_num(PP_CMLIMITMAXOPERATIONS))) - { - TRACE("Enabling task %ld\n", i); - pTask->SetContinueFlag(true); - pTask->IncreaseOperationsPending(); - pTask->SetStatus(0, ST_WAITING); // turn off wait state - } - } - } + m_tasks.ResumeWaitingTasks((size_t)GetConfig().get_signed_num(PP_CMLIMITMAXOPERATIONS)); break; } } @@ -474,7 +461,7 @@ // special operation - modify stuff CFiltersArray ffFilters; - int iPriority=(int)GetConfig().get_signed_num(PP_CMDEFAULTPRIORITY); + int iPriority = boost::numeric_cast(GetConfig().get_signed_num(PP_CMDEFAULTPRIORITY)); BUFFERSIZES bsSizes; bsSizes.m_bOnlyDefault=GetConfig().get_bool(PP_BFUSEONLYDEFAULT); bsSizes.m_uiDefaultSize=(UINT)GetConfig().get_signed_num(PP_BFDEFAULT); @@ -539,38 +526,38 @@ } // create new task - CTask *pTask = m_tasks.CreateTask(); - pTask->SetDestPath(strDstPath); - CClipboardEntry* pEntry; + CTaskPtr spTask = m_tasks.CreateTask(); + spTask->SetDestPath(strDstPath); + CClipboardEntryPtr spEntry; // files for (int i=0;iSetPath(astrFiles.GetAt(i)); - pEntry->CalcBufferIndex(pTask->GetDestPath()); - pTask->AddClipboardData(pEntry); + spEntry.reset(new CClipboardEntry); + spEntry->SetPath(astrFiles.GetAt(i)); + spEntry->CalcBufferIndex(spTask->GetDestPath()); + spTask->AddClipboardData(spEntry); } - pTask->SetStatus(bMove ? ST_MOVE : ST_COPY, ST_OPERATION_MASK); + spTask->SetStatus(bMove ? ST_MOVE : ST_COPY, ST_OPERATION_MASK); // special status - pTask->SetStatus((bOnlyCreate ? ST_IGNORE_CONTENT : 0) | (bIgnoreDirs ? ST_IGNORE_DIRS : 0) | (bForceDirectories ? ST_FORCE_DIRS : 0), ST_SPECIAL_MASK); + spTask->SetStatus((bOnlyCreate ? ST_IGNORE_CONTENT : 0) | (bIgnoreDirs ? ST_IGNORE_DIRS : 0) | (bForceDirectories ? ST_FORCE_DIRS : 0), ST_SPECIAL_MASK); // set some stuff related with task - pTask->SetBufferSizes(&bsSizes); - pTask->SetPriority(iPriority); - pTask->SetFilters(&ffFilters); - pTask->SetCopies(ucCopies); + spTask->SetBufferSizes(&bsSizes); + spTask->SetPriority(iPriority); + spTask->SetFilters(&ffFilters); + spTask->SetCopies(ucCopies); - m_tasks.Add(pTask); + m_tasks.Add(spTask); // save state of a task - pTask->Store(true); - pTask->Store(false); + spTask->Store(true); + spTask->Store(false); // add to task list and start processing - pTask->BeginProcessing(); + spTask->BeginProcessing(); return CWnd::OnCopyData(pWnd, pCopyDataStruct); } @@ -589,7 +576,7 @@ CCustomCopyDlg dlg; dlg.m_ccData.m_iOperation=0; - dlg.m_ccData.m_iPriority=(int)rConfig.get_signed_num(PP_CMDEFAULTPRIORITY); + dlg.m_ccData.m_iPriority = boost::numeric_cast(rConfig.get_signed_num(PP_CMDEFAULTPRIORITY)); dlg.m_ccData.m_bsSizes.m_bOnlyDefault=rConfig.get_bool(PP_BFUSEONLYDEFAULT); dlg.m_ccData.m_bsSizes.m_uiDefaultSize=(UINT)rConfig.get_signed_num(PP_BFDEFAULT); dlg.m_ccData.m_bsSizes.m_uiOneDiskSize=(UINT)rConfig.get_signed_num(PP_BFONEDISK); @@ -624,35 +611,35 @@ } // new task - CTask *pTask = m_tasks.CreateTask(); - pTask->SetDestPath(dlg.m_ccData.m_strDestPath); - CClipboardEntry *pEntry; + CTaskPtr spTask = m_tasks.CreateTask(); + spTask->SetDestPath(dlg.m_ccData.m_strDestPath); + CClipboardEntryPtr spEntry; for (int i=0;iSetPath(dlg.m_ccData.m_astrPaths.GetAt(i)); - pEntry->CalcBufferIndex(pTask->GetDestPath()); - pTask->AddClipboardData(pEntry); + spEntry.reset(new CClipboardEntry); + spEntry->SetPath(dlg.m_ccData.m_astrPaths.GetAt(i)); + spEntry->CalcBufferIndex(spTask->GetDestPath()); + spTask->AddClipboardData(spEntry); } - pTask->SetStatus((dlg.m_ccData.m_iOperation == 1) ? ST_MOVE : ST_COPY, ST_OPERATION_MASK); + spTask->SetStatus((dlg.m_ccData.m_iOperation == 1) ? ST_MOVE : ST_COPY, ST_OPERATION_MASK); // special status - pTask->SetStatus((dlg.m_ccData.m_bCreateStructure ? ST_IGNORE_CONTENT : 0) | (dlg.m_ccData.m_bIgnoreFolders ? ST_IGNORE_DIRS : 0) + spTask->SetStatus((dlg.m_ccData.m_bCreateStructure ? ST_IGNORE_CONTENT : 0) | (dlg.m_ccData.m_bIgnoreFolders ? ST_IGNORE_DIRS : 0) | (dlg.m_ccData.m_bForceDirectories ? ST_FORCE_DIRS : 0), ST_SPECIAL_MASK); - pTask->SetBufferSizes(&dlg.m_ccData.m_bsSizes); - pTask->SetPriority(dlg.m_ccData.m_iPriority); - pTask->SetFilters(&dlg.m_ccData.m_afFilters); + spTask->SetBufferSizes(&dlg.m_ccData.m_bsSizes); + spTask->SetPriority(dlg.m_ccData.m_iPriority); + spTask->SetFilters(&dlg.m_ccData.m_afFilters); - m_tasks.Add(pTask); + m_tasks.Add(spTask); // save - pTask->Store(true); - pTask->Store(false); + spTask->Store(true); + spTask->Store(false); // store and start - pTask->BeginProcessing(); + spTask->BeginProcessing(); } } @@ -662,7 +649,8 @@ { case WM_MINIVIEWDBLCLK: { - ShowStatusWindow((CTask*)lParam); + CTaskPtr spTask = m_tasks.GetTaskBySessionUniqueID(lParam); + ShowStatusWindow(spTask); break; } case WM_SHOWMINIVIEW: @@ -762,9 +750,9 @@ if(pszPath) cvShortcuts.push_back(pszPath); } - + // count of shortcuts to store - g_pscsShared->iShortcutsCount=__min(cvShortcuts.size(), (SHARED_BUFFERSIZE - 5 * sizeof(_COMMAND)) / sizeof(_SHORTCUT)); + g_pscsShared->iShortcutsCount = boost::numeric_cast(std::min(cvShortcuts.size(), (SHARED_BUFFERSIZE - 5 * sizeof(_COMMAND)) / sizeof(_SHORTCUT))); _SHORTCUT* pShortcut = g_pscsShared->GetShortcutsPtr(); CShortcut sc; for (int i=0;iiShortcutsCount;i++) @@ -923,27 +911,13 @@ // kill thread that monitors clipboard CClipboardMonitor::StopMonitor(); - // kill all unfinished tasks - send kill request - for (int i=0;iSetKillFlag(); + m_tasks.StopAllTasks(); - // wait for finishing - for (int i=0;iGetKilledFlag()) - Sleep(10); - m_tasks.GetAt(i)->CleanupAfterKill(); - } - // save m_tasks.SaveProgress(); // delete all tasks - int iSize=m_tasks.GetSize(); - for (int i=0;i* >(&m_tasks))->RemoveAll(); + m_tasks.RemoveAll(); } void CMainWnd::OnAppExit()