From 7aa1ae2e9886236a3e7f39ccf4bbaa2daafeca56 Mon Sep 17 00:00:00 2001 From: Rom Walton Date: Fri, 26 Aug 2005 06:50:46 +0000 Subject: [PATCH] *** empty log message *** svn path=/trunk/boinc/; revision=7513 --- checkin_notes | 10 +++++ clientgui/ViewProjects.cpp | 77 ++++++++++++++++++++------------------ clientgui/ViewWork.cpp | 28 +++++++------- 3 files changed, 66 insertions(+), 49 deletions(-) diff --git a/checkin_notes b/checkin_notes index a9491b4be9..184720f046 100755 --- a/checkin_notes +++ b/checkin_notes @@ -11004,3 +11004,13 @@ Rom 25 Aug 2005 clientgui/ BOINCGUI.pjd WizAttachProject.cpp + +Rom 25 Aug 2005 + - An update of the project view and work view can cause an update request + to the core client. If you are detaching from a project, the reference + to the project by position can be NULL. Check for the NULL before you + dereference the pointer. + + clientgui/ + ViewProjects.cpp + ViewWork.cpp diff --git a/clientgui/ViewProjects.cpp b/clientgui/ViewProjects.cpp index 2fac60f8ef..6e3791631c 100644 --- a/clientgui/ViewProjects.cpp +++ b/clientgui/ViewProjects.cpp @@ -630,24 +630,28 @@ void CViewProjects::UpdateSelection() { m_pTaskPane->EnableTask(pGroup->m_Tasks[BTN_UPDATE]); m_pTaskPane->EnableTask(pGroup->m_Tasks[BTN_UPDATE_ALL]); m_pTaskPane->EnableTask(pGroup->m_Tasks[BTN_SUSPEND]); - if (project->suspended_via_gui) { - m_pTaskPane->UpdateTask( - pGroup->m_Tasks[BTN_SUSPEND], _("Resume"), _("Resume work for this project.") - ); - } else { - m_pTaskPane->UpdateTask( - pGroup->m_Tasks[BTN_SUSPEND], _("Suspend"), _("Suspend work for this project.") - ); + if (project) { + if (project->suspended_via_gui) { + m_pTaskPane->UpdateTask( + pGroup->m_Tasks[BTN_SUSPEND], _("Resume"), _("Resume work for this project.") + ); + } else { + m_pTaskPane->UpdateTask( + pGroup->m_Tasks[BTN_SUSPEND], _("Suspend"), _("Suspend work for this project.") + ); + } } m_pTaskPane->EnableTask(pGroup->m_Tasks[BTN_NOWORK]); - if (project->dont_request_more_work) { - m_pTaskPane->UpdateTask( - pGroup->m_Tasks[BTN_NOWORK], _("Allow new work"), _("Allow fetching new work for this project.") - ); - } else { - m_pTaskPane->UpdateTask( - pGroup->m_Tasks[BTN_NOWORK], _("No new work"), _("Don't fetch new work for this project.") - ); + if (project) { + if (project->dont_request_more_work) { + m_pTaskPane->UpdateTask( + pGroup->m_Tasks[BTN_NOWORK], _("Allow new work"), _("Allow fetching new work for this project.") + ); + } else { + m_pTaskPane->UpdateTask( + pGroup->m_Tasks[BTN_NOWORK], _("No new work"), _("Don't fetch new work for this project.") + ); + } } m_pTaskPane->EnableTask(pGroup->m_Tasks[BTN_RESET]); m_pTaskPane->EnableTask(pGroup->m_Tasks[BTN_DETACH]); @@ -681,30 +685,31 @@ void CViewProjects::UpdateSelection() { // If something is selected create the tasks and controls if (m_pListPane->GetSelectedItemCount()) { project = pDoc->project(m_pListPane->GetFirstSelected()); + if (project) { + // Create the web sites task group + pGroup = new CTaskItemGroup( _("Web sites") ); + m_TaskGroups.push_back( pGroup ); - // Create the web sites task group - pGroup = new CTaskItemGroup( _("Web sites") ); - m_TaskGroups.push_back( pGroup ); - - // Default project url - pItem = new CTaskItem( - project->project_name.c_str(), - wxT(""), - project->master_url.c_str(), - ID_TASK_PROJECT_WEB_PROJDEF_MIN - ); - pGroup->m_Tasks.push_back(pItem); - - - // Project defined urls - for (i=0;(igui_urls.size())&&(i<=ID_TASK_PROJECT_WEB_PROJDEF_MAX);i++) { + // Default project url pItem = new CTaskItem( - _(project->gui_urls[i].name.c_str()), - _(project->gui_urls[i].description.c_str()), - project->gui_urls[i].url.c_str(), - ID_TASK_PROJECT_WEB_PROJDEF_MIN + 1 + i + project->project_name.c_str(), + wxT(""), + project->master_url.c_str(), + ID_TASK_PROJECT_WEB_PROJDEF_MIN ); pGroup->m_Tasks.push_back(pItem); + + + // Project defined urls + for (i=0;(igui_urls.size())&&(i<=ID_TASK_PROJECT_WEB_PROJDEF_MAX);i++) { + pItem = new CTaskItem( + _(project->gui_urls[i].name.c_str()), + _(project->gui_urls[i].description.c_str()), + project->gui_urls[i].url.c_str(), + ID_TASK_PROJECT_WEB_PROJDEF_MIN + 1 + i + ); + pGroup->m_Tasks.push_back(pItem); + } } } diff --git a/clientgui/ViewWork.cpp b/clientgui/ViewWork.cpp index dca564d295..587da7d695 100644 --- a/clientgui/ViewWork.cpp +++ b/clientgui/ViewWork.cpp @@ -438,19 +438,21 @@ void CViewWork::UpdateSelection() { if (m_pListPane->GetSelectedItemCount()) { RESULT* result = pDoc->result(m_pListPane->GetFirstSelected()); m_pTaskPane->EnableTask(pGroup->m_Tasks[BTN_SUSPEND]); - if (result->suspended_via_gui) { - m_pTaskPane->UpdateTask( - pGroup->m_Tasks[BTN_SUSPEND], _("Resume"), _("Resume work for this result.") - ); - } else { - m_pTaskPane->UpdateTask( - pGroup->m_Tasks[BTN_SUSPEND], _("Suspend"), _("Suspend work for this result.") - ); - } - if (result->supports_graphics) { - m_pTaskPane->EnableTask(pGroup->m_Tasks[BTN_GRAPHICS]); - } else { - m_pTaskPane->DisableTask(pGroup->m_Tasks[BTN_GRAPHICS]); + if (result) { + if (result->suspended_via_gui) { + m_pTaskPane->UpdateTask( + pGroup->m_Tasks[BTN_SUSPEND], _("Resume"), _("Resume work for this result.") + ); + } else { + m_pTaskPane->UpdateTask( + pGroup->m_Tasks[BTN_SUSPEND], _("Suspend"), _("Suspend work for this result.") + ); + } + if (result->supports_graphics) { + m_pTaskPane->EnableTask(pGroup->m_Tasks[BTN_GRAPHICS]); + } else { + m_pTaskPane->DisableTask(pGroup->m_Tasks[BTN_GRAPHICS]); + } } m_pTaskPane->EnableTask(pGroup->m_Tasks[BTN_ABORT]); } else {