*** empty log message ***

svn path=/trunk/boinc/; revision=5917
This commit is contained in:
David Anderson 2005-04-21 23:53:39 +00:00
parent 9796c6d9e8
commit fcc0732098
10 changed files with 136 additions and 128 deletions

View File

@ -27522,7 +27522,7 @@ David 21 April 2005
MainDocument.cpp,h
ViewProjects.cpp
Rom 20 April 2005
Rom 21 April 2005
- Code Cleanup
clientgui/
@ -27535,3 +27535,21 @@ Rom 20 April 2005
ViewStatistics.cpp, .h
ViewTransfers.cpp, .h
ViewWork.cpp, .h
David 21 April 2005
- CPU scheduler: don't run projects or results suspended via GUI,
even in earliest-deadline-first mode
- fix button logic for projects
- set buttons in work tab based on selection
- include graphics_mode_acked in GUI RPC description RESULT.
Could indicate whether app has window open (but doesn't yet).
client/
app.C
cs_apps.C
clientgui/
MainDocument.cpp,h
ViewProjects.cpp,h
ViewWork.cpp, h
lib/
gui_rpc_client.h

View File

@ -352,9 +352,7 @@ int ACTIVE_TASK::write(MIOFILE& fout) {
" <fraction_done>%f</fraction_done>\n"
" <current_cpu_time>%f</current_cpu_time>\n"
" <vm_bytes>%f</vm_bytes>\n"
" <rss_bytes>%f</rss_bytes>\n"
"%s"
"</active_task>\n",
" <rss_bytes>%f</rss_bytes>\n",
result->project->master_url,
result->name,
task_state,
@ -365,9 +363,16 @@ int ACTIVE_TASK::write(MIOFILE& fout) {
fraction_done,
current_cpu_time,
vm_bytes,
rss_bytes,
supports_graphics()?" <supports_graphics/>\n":""
rss_bytes
);
if (supports_graphics()) {
fout.printf(
" <supports_graphics/>\n"
" <graphics_mode_acked>%d</graphics_mode_acked>\n",
graphics_mode_acked
);
}
fout.printf("</active_task>\n");
return 0;
}

View File

@ -347,6 +347,7 @@ bool CLIENT_STATE::schedule_largest_debt_project(double expected_pay_off) {
best_project->next_runnable_result = 0;
return true;
}
// Schedule the active task with the earliest deadline
// Return true iff a task was scheduled.
//
@ -360,6 +361,8 @@ bool CLIENT_STATE::schedule_earliest_deadline_result(double expected_pay_off) {
for (i=0; i < results.size(); ++i) {
RESULT *r = results[i];
if (r->state != RESULT_FILES_DOWNLOADED) continue;
if (r->suspended_via_gui) continue;
if (r->project->suspended_via_gui) continue;
if (r->project->non_cpu_intensive) continue;
if (r->already_selected) continue;
if (first || r->report_deadline < earliest_deadline) {

View File

@ -1063,6 +1063,10 @@ PROJECT* CMainDocument::project(int i) {
return project_status.projects[i];
}
RESULT* CMainDocument::result(int i) {
return results.results[i];
}
int CMainDocument::CachedResultsStatusUpdate() {
int iRetVal = 0;

View File

@ -164,6 +164,7 @@ private:
public:
PROJECT* project(int);
RESULT* result(int);
int GetProjectCount();
int GetProjectProjectName(int iIndex, wxString& strBuffer);
int GetProjectProjectURL(int iIndex, wxString& strBuffer);

View File

@ -77,9 +77,7 @@ IMPLEMENT_DYNAMIC_CLASS(CViewProjects, CBOINCBaseView)
BEGIN_EVENT_TABLE (CViewProjects, CBOINCBaseView)
EVT_BUTTON(ID_TASK_PROJECT_UPDATE, CViewProjects::OnProjectUpdate)
EVT_BUTTON(ID_TASK_PROJECT_SUSPEND, CViewProjects::OnProjectSuspend)
EVT_BUTTON(ID_TASK_PROJECT_RESUME, CViewProjects::OnProjectResume)
EVT_BUTTON(ID_TASK_PROJECT_NONEWWORK, CViewProjects::OnProjectNoNewWork)
EVT_BUTTON(ID_TASK_PROJECT_ALLOWNEWWORK, CViewProjects::OnProjectAllowNewWork)
EVT_BUTTON(ID_TASK_PROJECT_RESET, CViewProjects::OnProjectReset)
EVT_BUTTON(ID_TASK_PROJECT_DETACH, CViewProjects::OnProjectDetach)
EVT_BUTTON(ID_TASK_PROJECT_ATTACH, CViewProjects::OnProjectAttach)
@ -108,15 +106,15 @@ CViewProjects::CViewProjects(wxNotebook* pNotebook) :
m_TaskGroups.push_back( pGroup );
pItem = new CTaskItem(
_("Update project"),
_("Report all completed work and refresh "
"your credit and preferences for this project."),
_("Update"),
_("Report all completed work, get latest credit, "
"get latest preferences, and possibly get more work."),
ID_TASK_PROJECT_UPDATE
);
pGroup->m_Tasks.push_back( pItem );
pItem = new CTaskItem(
_("Suspend project"),
_("Suspend"),
_("Stop work for this project "
"(you can resume later)."),
ID_TASK_PROJECT_SUSPEND
@ -144,7 +142,7 @@ CViewProjects::CViewProjects(wxNotebook* pNotebook) :
pGroup->m_Tasks.push_back( pItem );
pItem = new CTaskItem(
_("Detach from project"),
_("Detach"),
_("Detach this computer from this project. "
"Work in progress will be lost. "
"You can update the project first to report "
@ -192,6 +190,8 @@ CViewProjects::CViewProjects(wxNotebook* pNotebook) :
m_pListPane->InsertColumn(COLUMN_AVGCREDIT, _("Avg. credit"), wxLIST_FORMAT_RIGHT, 80);
m_pListPane->InsertColumn(COLUMN_RESOURCESHARE, _("Resource share"), wxLIST_FORMAT_CENTRE, 85);
m_pListPane->InsertColumn(COLUMN_STATUS, _("Status"), wxLIST_FORMAT_LEFT, 150);
UpdateSelection();
}
@ -248,9 +248,16 @@ void CViewProjects::OnProjectSuspend( wxCommandEvent& event ) {
wxASSERT(NULL != m_pTaskPane);
wxASSERT(NULL != m_pListPane);
pFrame->UpdateStatusText(_("Suspending project..."));
pDoc->ProjectSuspend(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
PROJECT* project = pDoc->project(m_pListPane->GetFirstSelected());
if (project->suspended_via_gui) {
pFrame->UpdateStatusText(_("Resuming project..."));
pDoc->ProjectResume(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
} else {
pFrame->UpdateStatusText(_("Suspending project..."));
pDoc->ProjectSuspend(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
}
UpdateSelection();
pFrame->ProcessRefreshView();
@ -259,30 +266,6 @@ void CViewProjects::OnProjectSuspend( wxCommandEvent& event ) {
}
void CViewProjects::OnProjectResume( wxCommandEvent& event ) {
wxLogTrace(wxT("Function Start/End"), wxT("CViewProjects::OnProjectResume - Function Begin"));
CMainDocument* pDoc = wxGetApp().GetDocument();
CMainFrame* pFrame = wxGetApp().GetFrame();
wxASSERT(NULL != pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
wxASSERT(NULL != pFrame);
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
wxASSERT(NULL != m_pTaskPane);
wxASSERT(NULL != m_pListPane);
pFrame->UpdateStatusText(_("Resuming project..."));
pDoc->ProjectResume(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
UpdateSelection();
pFrame->ProcessRefreshView();
wxLogTrace(wxT("Function Start/End"), wxT("CViewProjects::OnProjectResume - Function End"));
}
void CViewProjects::OnProjectNoNewWork( wxCommandEvent& event ) {
wxLogTrace(wxT("Function Start/End"), wxT("CViewProjects::OnProjectNoNewWork - Function Begin"));
@ -296,9 +279,16 @@ void CViewProjects::OnProjectNoNewWork( wxCommandEvent& event ) {
wxASSERT(NULL != m_pTaskPane);
wxASSERT(NULL != m_pListPane);
pFrame->UpdateStatusText(_("Telling project to not fetch additional work..."));
pDoc->ProjectNoMoreWork(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
PROJECT* project = pDoc->project(m_pListPane->GetFirstSelected());
if (project->dont_request_more_work) {
pFrame->UpdateStatusText(_("Telling project to allow additional work downloads..."));
pDoc->ProjectAllowMoreWork(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
} else {
pFrame->UpdateStatusText(_("Telling project to not fetch additional work..."));
pDoc->ProjectNoMoreWork(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
}
UpdateSelection();
pFrame->ProcessRefreshView();
@ -307,28 +297,6 @@ void CViewProjects::OnProjectNoNewWork( wxCommandEvent& event ) {
}
void CViewProjects::OnProjectAllowNewWork( wxCommandEvent& event ) {
wxLogTrace(wxT("Function Start/End"), wxT("CViewProjects::OnProjectAllowNewWork - Function Begin"));
CMainDocument* pDoc = wxGetApp().GetDocument();
CMainFrame* pFrame = wxGetApp().GetFrame();
wxASSERT(NULL != pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
wxASSERT(NULL != pFrame);
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
wxASSERT(NULL != m_pTaskPane);
wxASSERT(NULL != m_pListPane);
pFrame->UpdateStatusText(_("Telling project to allow additional work downloads..."));
pDoc->ProjectAllowMoreWork(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
UpdateSelection();
pFrame->ProcessRefreshView();
wxLogTrace(wxT("Function Start/End"), wxT("CViewProjects::OnProjectAllowNewWork - Function End"));
}
void CViewProjects::OnProjectReset( wxCommandEvent& event ) {
@ -647,7 +615,7 @@ void CViewProjects::UpdateSelection() {
pGroup->button(BTN_NOWORK)->SetToolTip(wxString("Allow fetching new work for this project"));
} else {
pGroup->button(BTN_NOWORK)->SetLabel(wxString("No new work"));
pGroup->button(BTN_NOWORK)->SetToolTip(wxString("Don't allow fetching new work for this project"));
pGroup->button(BTN_NOWORK)->SetToolTip(wxString("Don't fetch new work for this project"));
}
pGroup->button(BTN_RESET)->Enable();
pGroup->button(BTN_DETACH)->Enable();

View File

@ -59,9 +59,7 @@ public:
void OnProjectUpdate( wxCommandEvent& event );
void OnProjectSuspend( wxCommandEvent& event );
void OnProjectResume( wxCommandEvent& event );
void OnProjectNoNewWork( wxCommandEvent& event );
void OnProjectAllowNewWork( wxCommandEvent& event );
void OnProjectReset( wxCommandEvent& event );
void OnProjectDetach( wxCommandEvent& event );
void OnProjectAttach( wxCommandEvent& event );

View File

@ -42,6 +42,9 @@
#define COLUMN_REPORTDEADLINE 6
#define COLUMN_STATUS 7
#define BTN_SUSPEND 0
#define BTN_GRAPHICS 1
#define BTN_ABORT 2
CWork::CWork() {
m_strProjectName = wxEmptyString;
@ -71,7 +74,6 @@ IMPLEMENT_DYNAMIC_CLASS(CViewWork, CBOINCBaseView)
BEGIN_EVENT_TABLE (CViewWork, CBOINCBaseView)
EVT_BUTTON(ID_TASK_WORK_SUSPEND, CViewWork::OnWorkSuspend)
EVT_BUTTON(ID_TASK_WORK_RESUME, CViewWork::OnWorkResume)
EVT_BUTTON(ID_TASK_WORK_SHOWGRAPHICS, CViewWork::OnWorkShowGraphics)
EVT_BUTTON(ID_TASK_WORK_ABORT, CViewWork::OnWorkAbort)
EVT_LIST_ITEM_SELECTED(ID_LIST_WORKVIEW, CViewWork::OnListSelected)
@ -100,16 +102,9 @@ CViewWork::CViewWork(wxNotebook* pNotebook) :
pItem = new CTaskItem(
_("Suspend"),
_("Suspend the result."),
_("Suspend work on the result."),
ID_TASK_WORK_SUSPEND
);
pGroup->m_Tasks.push_back( pItem );
pItem = new CTaskItem(
_("Resume"),
_("Resume a suspended result."),
ID_TASK_WORK_RESUME
);
pGroup->m_Tasks.push_back( pItem );
pItem = new CTaskItem(
@ -120,9 +115,9 @@ CViewWork::CViewWork(wxNotebook* pNotebook) :
pGroup->m_Tasks.push_back( pItem );
pItem = new CTaskItem(
_("Abort result"),
_("Delete the result from the work queue. "
"This will prevent you from being granted credit for the result."),
_("Abort"),
_("Abandon work on the result. "
"You will get no credit for it."),
ID_TASK_WORK_ABORT
);
pGroup->m_Tasks.push_back( pItem );
@ -140,6 +135,8 @@ CViewWork::CViewWork(wxNotebook* pNotebook) :
m_pListPane->InsertColumn(COLUMN_TOCOMPLETION, _("To completion"), wxLIST_FORMAT_RIGHT, 100);
m_pListPane->InsertColumn(COLUMN_REPORTDEADLINE, _("Report deadline"), wxLIST_FORMAT_LEFT, 150);
m_pListPane->InsertColumn(COLUMN_STATUS, _("Status"), wxLIST_FORMAT_LEFT, 135);
UpdateSelection();
}
@ -172,9 +169,16 @@ void CViewWork::OnWorkSuspend( wxCommandEvent& event ) {
wxASSERT(NULL != m_pTaskPane);
wxASSERT(NULL != m_pListPane);
pFrame->UpdateStatusText(_("Suspending result..."));
pDoc->WorkSuspend(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
RESULT* result = pDoc->result(m_pListPane->GetFirstSelected());
if (result->suspended_via_gui) {
pFrame->UpdateStatusText(_("Resuming result..."));
pDoc->WorkResume(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
} else {
pFrame->UpdateStatusText(_("Suspending result..."));
pDoc->WorkSuspend(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
}
UpdateSelection();
pFrame->ProcessRefreshView();
@ -182,31 +186,6 @@ void CViewWork::OnWorkSuspend( wxCommandEvent& event ) {
wxLogTrace(wxT("Function Start/End"), wxT("CViewWork::OnWorkSuspend - Function End"));
}
void CViewWork::OnWorkResume( wxCommandEvent& event ) {
wxLogTrace(wxT("Function Start/End"), wxT("CViewWork::OnWorkResume - Function Begin"));
CMainDocument* pDoc = wxGetApp().GetDocument();
CMainFrame* pFrame = wxGetApp().GetFrame();
wxASSERT(NULL != pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
wxASSERT(NULL != pFrame);
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
wxASSERT(NULL != m_pTaskPane);
wxASSERT(NULL != m_pListPane);
pFrame->UpdateStatusText(_("Resuming result..."));
pDoc->WorkResume(m_pListPane->GetFirstSelected());
pFrame->UpdateStatusText(wxT(""));
UpdateSelection();
pFrame->ProcessRefreshView();
wxLogTrace(wxT("Function Start/End"), wxT("CViewWork::OnWorkResume - Function End"));
}
void CViewWork::OnWorkShowGraphics( wxCommandEvent& event ) {
wxLogTrace(wxT("Function Start/End"), wxT("CViewWork::OnWorkShowGraphics - Function Begin"));
@ -226,29 +205,36 @@ void CViewWork::OnWorkShowGraphics( wxCommandEvent& event ) {
pDoc->GetConnectedComputerName(strMachineName);
RESULT* result = pDoc->result(m_pListPane->GetFirstSelected());
// TODO: implement hide as well as show
if (1) {
#ifdef _WIN32
if (!strMachineName.empty()) {
iAnswer = wxMessageBox(
_("Are you sure you wish to display graphics on a remote machine?"),
_("Show graphics"),
wxYES_NO | wxICON_QUESTION,
this
);
} else {
iAnswer = wxYES;
}
if (!strMachineName.empty()) {
iAnswer = wxMessageBox(
_("Are you sure you wish to display graphics on a remote machine?"),
_("Show graphics"),
wxYES_NO | wxICON_QUESTION,
this
);
} else {
iAnswer = wxYES;
}
#else
iAnswer = wxYES;
iAnswer = wxYES;
#endif
if (wxYES == iAnswer) {
pDoc->WorkShowGraphics(
m_pListPane->GetFirstSelected(),
false,
wxGetApp().m_strDefaultWindowStation,
wxGetApp().m_strDefaultDesktop,
wxGetApp().m_strDefaultDisplay
);
if (wxYES == iAnswer) {
pDoc->WorkShowGraphics(
m_pListPane->GetFirstSelected(),
false,
wxGetApp().m_strDefaultWindowStation,
wxGetApp().m_strDefaultDesktop,
wxGetApp().m_strDefaultDisplay
);
}
pFrame->UpdateStatusText(wxT(""));
}
pFrame->UpdateStatusText(wxT(""));
@ -450,6 +436,31 @@ wxInt32 CViewWork::UpdateCache(long item, long column, wxString& strNewData) {
void CViewWork::UpdateSelection() {
CTaskItemGroup* pGroup = m_TaskGroups[0];
if (m_pListPane->GetSelectedItemCount() == 0) {
pGroup->button(BTN_SUSPEND)->Disable();
pGroup->button(BTN_GRAPHICS)->Disable();
pGroup->button(BTN_ABORT)->Disable();
} else {
CMainDocument* pDoc = wxGetApp().GetDocument();
RESULT* result = pDoc->result(m_pListPane->GetFirstSelected());
pGroup->button(BTN_SUSPEND)->Enable();
if (result->suspended_via_gui) {
pGroup->button(BTN_SUSPEND)->SetLabel(wxString("Resume"));
pGroup->button(BTN_SUSPEND)->SetToolTip(wxString("Resume work for this result"));
} else {
pGroup->button(BTN_SUSPEND)->SetLabel(wxString("Suspend"));
pGroup->button(BTN_SUSPEND)->SetToolTip(wxString("Suspend work for this result"));
}
if (result->supports_graphics) {
pGroup->button(BTN_GRAPHICS)->Enable();
} else {
pGroup->button(BTN_GRAPHICS)->Disable();
}
pGroup->button(BTN_ABORT)->Enable();
}
}

View File

@ -59,7 +59,6 @@ public:
virtual const char** GetViewIcon();
void OnWorkSuspend( wxCommandEvent& event );
void OnWorkResume( wxCommandEvent& event );
void OnWorkShowGraphics( wxCommandEvent& event );
void OnWorkAbort( wxCommandEvent& event );

View File

@ -194,6 +194,7 @@ public:
double rss_bytes;
double estimated_cpu_time_remaining;
bool supports_graphics;
int graphics_mode_acked;
APP* app;
WORKUNIT* wup;