Index: src/ch/MiniViewDlg.cpp =================================================================== diff -u -N -r814b694086d5dc450efb6a5e5c6902145ddc07fd -r68bbff6670ec7d7010ced69f600493a0ae0c687c --- src/ch/MiniViewDlg.cpp (.../MiniViewDlg.cpp) (revision 814b694086d5dc450efb6a5e5c6902145ddc07fd) +++ src/ch/MiniViewDlg.cpp (.../MiniViewDlg.cpp) (revision 68bbff6670ec7d7010ced69f600493a0ae0c687c) @@ -25,6 +25,7 @@ #include "../libchengine/TTaskManager.h" #include "../libchengine/TTask.h" #include "GuiOptions.h" +#include "RuleEditDlg.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -341,6 +342,7 @@ case ID_TASK_MENU_CANCEL: case ID_TASK_MENU_REMOVE: case ID_TASK_MENU_RESET_FEEDBACK: + case ID_TASK_MENU_EDIT_FEEDBACK: ExecTaskCommand(iMenuItem); break; @@ -411,9 +413,37 @@ case ID_TASK_MENU_RESET_FEEDBACK: spTask->RestoreFeedbackDefaults(); break; + case ID_TASK_MENU_EDIT_FEEDBACK: + OnEditUserFeedback(); + break; } } +void CMiniViewDlg::OnEditUserFeedback() +{ + taskid_t taskID = m_currentTaskId; + TTaskPtr spTask = m_pTasks->GetTaskByTaskID(taskID); + if(!spTask) + return; + + if(spTask) + { + FeedbackRules rules = spTask->GetFeedbackRules(); + spTask.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 + spTask = m_pTasks->GetTaskByTaskID(taskID); + if(spTask) + spTask->SetFeedbackRules(rules); + } + } +} + void CMiniViewDlg::OnLanguageChanged() { ResizeDialog(); Index: src/ch/MiniViewDlg.h =================================================================== diff -u -N -r814b694086d5dc450efb6a5e5c6902145ddc07fd -r68bbff6670ec7d7010ced69f600493a0ae0c687c --- src/ch/MiniViewDlg.h (.../MiniViewDlg.h) (revision 814b694086d5dc450efb6a5e5c6902145ddc07fd) +++ src/ch/MiniViewDlg.h (.../MiniViewDlg.h) (revision 68bbff6670ec7d7010ced69f600493a0ae0c687c) @@ -64,6 +64,7 @@ afx_msg LRESULT OnTaskRClick(WPARAM wParam, LPARAM lParam); void ExecTaskCommand(int idCmd); + void OnEditUserFeedback(); DECLARE_MESSAGE_MAP() 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(); Index: src/ch/StatusDlg.h =================================================================== diff -u -N -re45315d2ecd008df0162cba53a77dc6b8c5880d0 -r68bbff6670ec7d7010ced69f600493a0ae0c687c --- src/ch/StatusDlg.h (.../StatusDlg.h) (revision e45315d2ecd008df0162cba53a77dc6b8c5880d0) +++ src/ch/StatusDlg.h (.../StatusDlg.h) (revision 68bbff6670ec7d7010ced69f600493a0ae0c687c) @@ -25,6 +25,7 @@ #include "../libchengine/TTask.h" #include "../libchengine/TTaskManager.h" #include "TaskContextMenu.h" +#include "../libchengine/TaskID.h" namespace chengine { class TTaskManager; @@ -50,7 +51,7 @@ void ApplyButtonsState(); chengine::TTaskPtr GetSelectedItemPointer(); - size_t GetSelectedItemSessionUniqueID(); + chengine::taskid_t GetSelectedItemTaskID(); void EnableControls(bool bEnable=true); @@ -59,6 +60,7 @@ BOOL OnCommand(WPARAM wParam, LPARAM lParam) override; void OnResetUserFeedback(); + void OnEditUserFeedback(); LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam) override; Index: src/ch/ch.rc =================================================================== diff -u -N -r4d8adf81cb22d447a71925f4631623280c796e6f -r68bbff6670ec7d7010ced69f600493a0ae0c687c --- src/ch/ch.rc (.../ch.rc) (revision 4d8adf81cb22d447a71925f4631623280c796e6f) +++ src/ch/ch.rc (.../ch.rc) (revision 68bbff6670ec7d7010ced69f600493a0ae0c687c) @@ -1050,7 +1050,8 @@ MENUITEM "&Cancel", ID_TASK_MENU_CANCEL MENUITEM "Re&move", ID_TASK_MENU_REMOVE MENUITEM SEPARATOR - MENUITEM "Reset user-feedback state", ID_TASK_MENU_RESET_FEEDBACK + MENUITEM "Edit automatic responses", ID_TASK_MENU_EDIT_FEEDBACK + MENUITEM "Reset automatic responses", ID_TASK_MENU_RESET_FEEDBACK MENUITEM SEPARATOR MENUITEM "Pause all", ID_TASK_MENU_PAUSE_ALL MENUITEM "Resume all", ID_TASK_MENU_RESUME_ALL Index: src/ch/resource.h =================================================================== diff -u -N -re45315d2ecd008df0162cba53a77dc6b8c5880d0 -r68bbff6670ec7d7010ced69f600493a0ae0c687c --- src/ch/resource.h (.../resource.h) (revision e45315d2ecd008df0162cba53a77dc6b8c5880d0) +++ src/ch/resource.h (.../resource.h) (revision 68bbff6670ec7d7010ced69f600493a0ae0c687c) @@ -866,6 +866,7 @@ #define ID_TASK_MENU_CANCEL 32859 #define ID_TASK_MENU_REMOVE 32860 #define ID_TASK_MENU_RESET_FEEDBACK 32861 +#define ID_TASK_MENU_EDIT_FEEDBACK 32862 #define ID_TASK_MENU_RESUME_ALL 32867 #define ID_TASK_MENU_PAUSE_ALL 32868 #define ID_TASK_MENU_RESTART_ALL 32869 Index: src/libchengine/TTask.cpp =================================================================== diff -u -N -re45315d2ecd008df0162cba53a77dc6b8c5880d0 -r68bbff6670ec7d7010ced69f600493a0ae0c687c --- src/libchengine/TTask.cpp (.../TTask.cpp) (revision e45315d2ecd008df0162cba53a77dc6b8c5880d0) +++ src/libchengine/TTask.cpp (.../TTask.cpp) (revision 68bbff6670ec7d7010ced69f600493a0ae0c687c) @@ -360,6 +360,16 @@ m_spFeedbackManager->RestoreDefaults(); } + chengine::FeedbackRules TTask::GetFeedbackRules() + { + return m_spFeedbackManager->GetRules(); + } + + void TTask::SetFeedbackRules(const chengine::FeedbackRules& feedbackRules) + { + m_spFeedbackManager->SetRules(feedbackRules); + } + void TTask::PauseProcessing() { if (GetTaskState() != eTaskState_Finished && GetTaskState() != eTaskState_Cancelled) Index: src/libchengine/TTask.h =================================================================== diff -u -N -r08717141ce5f6926116c298cbc9442094a45bb67 -r68bbff6670ec7d7010ced69f600493a0ae0c687c --- src/libchengine/TTask.h (.../TTask.h) (revision 08717141ce5f6926116c298cbc9442094a45bb67) +++ src/libchengine/TTask.h (.../TTask.h) (revision 68bbff6670ec7d7010ced69f600493a0ae0c687c) @@ -87,6 +87,8 @@ void SetForceFlag(bool bFlag = true); bool GetForceFlag(); + chengine::FeedbackRules GetFeedbackRules(); + void SetFeedbackRules(const chengine::FeedbackRules& feedbackRules); void RestoreFeedbackDefaults(); private: