Index: src/ch/StatusDlg.cpp =================================================================== diff -u -N -re8897f4f07ba4523376c2d6599d87428424a4772 -r68bbff6670ec7d7010ced69f600493a0ae0c687c --- src/ch/StatusDlg.cpp (.../StatusDlg.cpp) (revision e8897f4f07ba4523376c2d6599d87428424a4772) +++ src/ch/StatusDlg.cpp (.../StatusDlg.cpp) (revision 68bbff6670ec7d7010ced69f600493a0ae0c687c) @@ -28,6 +28,7 @@ #include "../libchengine/TTaskManager.h" #include "../libchengine/TLocalFilesystem.h" #include "GuiOptions.h" +#include "RuleEditDlg.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -260,7 +261,7 @@ return; int iCurrentBufferIndex = 0; - chengine::TTaskStatsSnapshotPtr spTaskStats = m_spTaskMgrStats->GetTaskStatsForTaskID(boost::numeric_cast(GetSelectedItemSessionUniqueID())); + chengine::TTaskStatsSnapshotPtr spTaskStats = m_spTaskMgrStats->GetTaskStatsForTaskID(boost::numeric_cast(GetSelectedItemTaskID())); if(spTaskStats) { chengine::TSubTaskStatsSnapshotPtr spSubTaskStats = spTaskStats->GetSubTasksStats().GetCurrentSubTaskSnapshot(); @@ -278,28 +279,23 @@ chengine::TTaskPtr CStatusDlg::GetSelectedItemPointer() { - // returns ptr to a TTask for a given element in listview - if(m_ctlStatusList.GetSelectedCount() == 1) - { - POSITION pos = m_ctlStatusList.GetFirstSelectedItemPosition(); - int nPos = m_ctlStatusList.GetNextSelectedItem(pos); - return m_pTasks->GetTaskByTaskID(boost::numeric_cast(m_ctlStatusList.GetItemData(nPos))); - } + taskid_t taskID = GetSelectedItemTaskID(); + if(taskID != chengine::NoTaskID) + return m_pTasks->GetTaskByTaskID(taskID); return chengine::TTaskPtr(); } -size_t CStatusDlg::GetSelectedItemSessionUniqueID() +chengine::taskid_t CStatusDlg::GetSelectedItemTaskID() { - // returns ptr to a TTask for a given element in listview if(m_ctlStatusList.GetSelectedCount() == 1) { POSITION pos = m_ctlStatusList.GetFirstSelectedItemPosition(); int nPos = m_ctlStatusList.GetNextSelectedItem(pos); - return m_ctlStatusList.GetItemData(nPos); + return boost::numeric_cast(m_ctlStatusList.GetItemData(nPos)); } - return std::numeric_limits::max(); + return chengine::NoTaskID; } void CStatusDlg::StickDialogToScreenEdge() @@ -408,6 +404,30 @@ spSelectedTask->RestoreFeedbackDefaults(); } +void CStatusDlg::OnEditUserFeedback() +{ + chengine::TTaskPtr spSelectedTask = GetSelectedItemPointer(); + + if(spSelectedTask) + { + taskid_t selectedTaskID = GetSelectedItemTaskID(); + + FeedbackRules rules = spSelectedTask->GetFeedbackRules(); + spSelectedTask.reset(); + + RuleEditDlg dlg(rules); + if(dlg.DoModal() == IDOK) + { + rules = dlg.GetRules(); + + // re-try searching for specific task to ensure it was not deleted in the meantime + spSelectedTask = m_pTasks->GetTaskByTaskID(selectedTaskID); + if(spSelectedTask) + spSelectedTask->SetFeedbackRules(rules); + } + } +} + void CStatusDlg::OnPauseButton() { chengine::TTaskPtr spTask = GetSelectedItemPointer(); @@ -594,7 +614,7 @@ void CStatusDlg::RefreshStatus() { // remember address of a current selection - size_t stSelectedTaskID = GetSelectedItemSessionUniqueID(); + size_t stSelectedTaskID = GetSelectedItemTaskID(); // get all the stats needed m_pTasks->GetStatsSnapshot(m_spTaskMgrStats); @@ -687,6 +707,9 @@ case ID_TASK_MENU_RESET_FEEDBACK: OnResetUserFeedback(); break; + case ID_TASK_MENU_EDIT_FEEDBACK: + OnEditUserFeedback(); + break; case ID_TASK_MENU_PAUSE_ALL: OnPauseAllButton();