From 4029ce304420408fabfbfd019ef6c840ce291c75 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Mon, 21 Aug 2006 16:38:16 +0000 Subject: [PATCH] *** empty log message *** svn path=/trunk/boinc/; revision=10953 --- checkin_notes | 341 ++++++++++++++++++----------------- clientgui/ViewStatistics.cpp | 75 ++++++-- 2 files changed, 229 insertions(+), 187 deletions(-) diff --git a/checkin_notes b/checkin_notes index 60054645ef..34c888c5bd 100755 --- a/checkin_notes +++ b/checkin_notes @@ -7561,27 +7561,27 @@ David 13 July 2006 translate.php David 14 July 2006 - - core client: clean up related to host venue and project preferences. - Old: store host venue in account file, - and use it when parsing account file - to get the right venue-specific prefs. - This is bad because the account file is not - supposed to containt host-specific info, - and the venue is host-specific. - New: venue is stored in client state file, as part of project. - On initial parse of account file, elements are skipped. - Later, after client state file has been read, - account files projects with non-empty host_venue - are read again, this time looking for the selected - element and ignoring the rest. - Has this fixed any bugs? Maybe yes, maybe no. - But the logic is simpler now. + - core client: clean up related to host venue and project preferences. + Old: store host venue in account file, + and use it when parsing account file + to get the right venue-specific prefs. + This is bad because the account file is not + supposed to containt host-specific info, + and the venue is host-specific. + New: venue is stored in client state file, as part of project. + On initial parse of account file, elements are skipped. + Later, after client state file has been read, + account files projects with non-empty host_venue + are read again, this time looking for the selected + element and ignoring the rest. + Has this fixed any bugs? Maybe yes, maybe no. + But the logic is simpler now. - client/ - client_state.C,h - client_types.C,h - cs_account.C - cs_scheduler.C + client/ + client_state.C,h + client_types.C,h + cs_account.C + cs_scheduler.C David 17 July 2006 - core client: close GUI RPC listening socket on exit @@ -7770,19 +7770,19 @@ David 20 July 2006 log_flags.C,h David 20 July 2006 - - core client: fix crash if client state file has - for a project with no account file. - Also shuffled logic of state file parsing to reduce indentation + - core client: fix crash if client state file has + for a project with no account file. + Also shuffled logic of state file parsing to reduce indentation - client/ - cs_statefile.C + client/ + cs_statefile.C David 20 July 2006 - - core client: fix crash if use flag, - and some GUI RPC reply is long (> 8K chars) + - core client: fix crash if use flag, + and some GUI RPC reply is long (> 8K chars) - client/ - gui_rpc_server_ops.C + client/ + gui_rpc_server_ops.C Rom 20 July 2006 - Fix build break in the simple GUI when building for the Mac. Using itoa @@ -7989,26 +7989,26 @@ Charlie 25 July 2006 Postinstall.cpp David 25 July 2006 - core client fixes: - - fix bug where interrupted downloads failed with checksum error. - This was because we were comparing the HTTP status with 200. - But partial transfer success is 206. - (bug was introduced in June 28 checkin) - - on startup, make sure that all files that are - supposed to be present actually are. - Otherwise set status to NOT_PRESENT, - so that they'll be downloaded again. - - on reset, clear project_files and user_files vectors - - project files: parse and save md5 checksum. - Note: this is a placeholder; - I'll change it to full FILE_INFO later. + core client fixes: + - fix bug where interrupted downloads failed with checksum error. + This was because we were comparing the HTTP status with 200. + But partial transfer success is 206. + (bug was introduced in June 28 checkin) + - on startup, make sure that all files that are + supposed to be present actually are. + Otherwise set status to NOT_PRESENT, + so that they'll be downloaded again. + - on reset, clear project_files and user_files vectors + - project files: parse and save md5 checksum. + Note: this is a placeholder; + I'll change it to full FILE_INFO later. - client/ - client_state.C,h - client_types.C - cs_files.C - file_xfer.C - http_curl.C + client/ + client_state.C,h + client_types.C + cs_files.C + file_xfer.C + http_curl.C David 25 July 2006 - fixes to Linux sandbox scripts (from Charlie) @@ -8040,11 +8040,11 @@ David 25 July 2006 scheduler_op.C David 25 July 2006 - - core client: when md5'ing a file, put the size in local var - rather than into the FILE_INFO + - core client: when md5'ing a file, put the size in local var + rather than into the FILE_INFO - client/ - cs_files.C + client/ + cs_files.C Charlie 25 July 2006 (HEAD) - Mac: Create separate targets for simple-gui and non-simple-gui Managers @@ -8156,13 +8156,13 @@ David 28 July 2006 forum_index.php David 28 July 2006 - - core client: bug fixes for project file mechanism - - clear project_file list before parsing it - - set fip->is_project_file (otherwise link won't get created) + - core client: bug fixes for project file mechanism + - clear project_file list before parsing it + - set fip->is_project_file (otherwise link won't get created) - client/ - client_types.C - cs_trickle.C + client/ + client_types.C + cs_trickle.C David 28 July 2006 - f2f email: don't show form if project hasn't created a mail template @@ -8318,24 +8318,24 @@ Charlie 1 Aug 2006 project.pbxproj David 2 Aug 2006 - - core client: fix CPU throttling mechanism. - - Range is 0..100, not 0..1 - - ACTIVE_TASK::prempt(): don't set scheduler_state - (that's not the job of this layer) - - core client: fiddle with messages - "task" should show you when results start and end - (always 2 messages per result) - "task_debug" shows every suspend/resume/checkpoint - "cpu_sched_debug" shows the results selected by scheduler - (more fiddling still needed) + - core client: fix CPU throttling mechanism. + - Range is 0..100, not 0..1 + - ACTIVE_TASK::prempt(): don't set scheduler_state + (that's not the job of this layer) + - core client: fiddle with messages + "task" should show you when results start and end + (always 2 messages per result) + "task_debug" shows every suspend/resume/checkpoint + "cpu_sched_debug" shows the results selected by scheduler + (more fiddling still needed) - client/ - app_control.C - app_start.C - cpu_sched.C - cs_prefs.C - lib/ - prefs.C + client/ + app_control.C + app_start.C + cpu_sched.C + cs_prefs.C + lib/ + prefs.C David 2 Aug 2006 - Reminder email: checked in SETI@home examples, @@ -8450,22 +8450,22 @@ David 6 Aug 2006 cs_apps.C David 6 Aug 2006 - - core client: enable graphics for an app if it's - scheduler state is "scheduled" - (rather than if it's actually running) - - change project files to Visual Studio 2005 format - (Rom: please check in 2003-format files with _2003.vcproj names) + - core client: enable graphics for an app if it's + scheduler state is "scheduled" + (rather than if it's actually running) + - change project files to Visual Studio 2005 format + (Rom: please check in 2003-format files with _2003.vcproj names) - client/ - app_graphics.C - win_build/ - boinc.sln - boinc_cli_curl.vcproj - boinc_dll.vcproj - boinc_ss.vcproj - boinccmd.vcproj - boincmgr_curl.vcproj - libboinc.vcproj + client/ + app_graphics.C + win_build/ + boinc.sln + boinc_cli_curl.vcproj + boinc_dll.vcproj + boinc_ss.vcproj + boinccmd.vcproj + boincmgr_curl.vcproj + libboinc.vcproj David 6 Aug 2006 - GUI RPC: get_activity_state() returns the reasons for suspension, @@ -8481,15 +8481,15 @@ David 6 Aug 2006 gui_rpc_client_ops.C David 6 Aug 2006 - - 2nd part of the above + - 2nd part of the above - clientgui/ - BOINCTaskBar.cpp - MainDocument.cpp - ViewTransfers.cpp - ViewWork.cpp - lib/ - gui_rpc_client.h + clientgui/ + BOINCTaskBar.cpp + MainDocument.cpp + ViewTransfers.cpp + ViewWork.cpp + lib/ + gui_rpc_client.h David 7 Aug 2006 - Add GUI RPCs for reading and writing the general prefs override file. @@ -8567,14 +8567,14 @@ David 8 Aug 2006 forum_moderate_post_action.php David 8 Aug 2006 - - core client: fix CPU scheduling but that would cause idle CPU - after suspending a task - - compile fix for VS2005 + - core client: fix CPU scheduling but that would cause idle CPU + after suspending a task + - compile fix for VS2005 - api/ - gutil_text.C - client/ - cpu_sched.C + api/ + gutil_text.C + client/ + cpu_sched.C Walt 8 Aug 2006 - Bugfix: On unicode builds on Linux,wasn't displaying project name @@ -8639,57 +8639,57 @@ Walt 10 Aug 2006 boinc_core_release_5_5_12 David 10 Aug 2006 - - major revision of work-fetch policy; - may fix bugs where client starves. - Also an improved version of my 10/8 scheduler fix. - (from John McLeod) + - major revision of work-fetch policy; + may fix bugs where client starves. + Also an improved version of my 10/8 scheduler fix. + (from John McLeod) - client/ - app_control.C - client_state.C - client_types.C - cpu_sched.C - cs_apps.C - cs_scheduler.C - gui_rpc_server_ops.C + client/ + app_control.C + client_state.C + client_types.C + cpu_sched.C + cs_apps.C + cs_scheduler.C + gui_rpc_server_ops.C David 11 Aug 2006 - - GUI RPC: add task and network suspend reasons to the - structure returned by get_cc_status(). - Future items should be put in this structure - rather than adding a new RPC. + - GUI RPC: add task and network suspend reasons to the + structure returned by get_cc_status(). + Future items should be put in this structure + rather than adding a new RPC. - Old RPCs (network_status() and get_activity_state()) - have been left in to avoid breaking current add-ons. - They have been marked as deprecated and will be removed 12/06. - - Manager: if task is suspended, say why + Old RPCs (network_status() and get_activity_state()) + have been left in to avoid breaking current add-ons. + They have been marked as deprecated and will be removed 12/06. + - Manager: if task is suspended, say why - client/ - gui_rpc_server_ops.C - net_stats.C - clientgui/ - BOINCTaskBar.cpp - MainDocument.cpp,h - ViewTransfers.cpp - ViewWork.cpp - lib/ - error_numbers.h - gui_rpc_client.h - gui_rpc_client_ops.C + client/ + gui_rpc_server_ops.C + net_stats.C + clientgui/ + BOINCTaskBar.cpp + MainDocument.cpp,h + ViewTransfers.cpp + ViewWork.cpp + lib/ + error_numbers.h + gui_rpc_client.h + gui_rpc_client_ops.C -Milos 11 Aug 2006 - - Added suport for importing images from skin for Flat Notebook - Added additional routine to check for Skin validity. Skin validity - is also checked now when different skin choosen. If skin is not valid - no skin will be changed. - clientgui/ - sg_BoincSimpleGUI.cpp - sg_ProjectsComponent.cpp - sg_SkinClass.h - clientgui/common - wxFlatNotebook.cpp - clientgui/skins/default && WorldCommunityGrid - skin.xml +Milos 11 Aug 2006 + - Added suport for importing images from skin for Flat Notebook + Added additional routine to check for Skin validity. Skin validity + is also checked now when different skin choosen. If skin is not valid + no skin will be changed. + clientgui/ + sg_BoincSimpleGUI.cpp + sg_ProjectsComponent.cpp + sg_SkinClass.h + clientgui/common + wxFlatNotebook.cpp + clientgui/skins/default && WorldCommunityGrid + skin.xml David 11 Aug 2006 - GUI RPC: change things so most of the read-only RPCs @@ -8845,13 +8845,13 @@ Charlie 15 Aug 2006 cs_scheduler.C David 15 Aug 2006 - - core client: removed message - - Manager: changed one wxDateTime to double (should change all) + - core client: removed message + - Manager: changed one wxDateTime to double (should change all) - client/ - cs_scheduler.C - clientgui/ - MainDocument.cpp,h + client/ + cs_scheduler.C + clientgui/ + MainDocument.cpp,h Rom 15 Aug 2006 - lib: Fix missing case for MIOFILE where MIOFILE.printf didn't know how @@ -8990,21 +8990,21 @@ Milos 18 Aug 2006 and project view. Also added logic for showing state clientgui/ - sg_ViewTabPage.cpp,h - sg_SkinClass.h - sg_ProjectsComponent.cpp - sg_DlgPreferences.cpp,h - sg_ClientStateIndicator.cpp,h - sg_BoincSimpleGUI.cpp,h - + sg_ViewTabPage.cpp,h + sg_SkinClass.h + sg_ProjectsComponent.cpp + sg_DlgPreferences.cpp,h + sg_ClientStateIndicator.cpp,h + sg_BoincSimpleGUI.cpp,h + client/skins/.../ skin.xml client/skins/.../graphic - conn_ind.png - error_image.png - state_ind_bg.png - simplegui_bg.png + conn_ind.png + error_image.png + state_ind_bg.png + simplegui_bg.png Charlie 19 Aug 2006 -Mac: Fixed a bug in setMacIcon() associated with sandbox security; @@ -9049,3 +9049,10 @@ Charlie 21 Aug 2006 api/ macglutfix.m x_opengl.C + +David 21 Aug 2006 + - Manager: make axis labels uniform in Statistics tab + (from Mifistor) + + clientgui/ + ViewStatistics.cpp diff --git a/clientgui/ViewStatistics.cpp b/clientgui/ViewStatistics.cpp index 2199b77a82..3ba19f064e 100644 --- a/clientgui/ViewStatistics.cpp +++ b/clientgui/ViewStatistics.cpp @@ -226,10 +226,10 @@ void CPaintStatistics::DrawLegend(wxPaintDC &dc, PROJECTS * &proj, CMainDocument dc.DrawRectangle(x_end+1,y_start+1+wxCoord(((double)(count)+0.5)*1.1*(double)(h_temp)),project_name_max_width-2,h_temp+2); } - wxColour tempColour1=wxColour(0,0,0); +// wxColour tempColour1=wxColour(0,0,0); wxColour grafColour=wxColour(0,0,0); wxInt32 typePoint=0; - tempColour1=GetForegroundColour (); +// tempColour1=GetForegroundColour(); if (bColour){ getTypePoint(typePoint,count); getDrawColour(grafColour,count); @@ -238,7 +238,7 @@ void CPaintStatistics::DrawLegend(wxPaintDC &dc, PROJECTS * &proj, CMainDocument dc.SetBrush(wxBrush(m_ligthbrushAxisColour , wxSOLID)); myDrawPoint(dc, x_end+4+1+m_GraphPointWidth/2, y_start+2+wxCoord(((double)(count)+1)*1.1*(double)(h_temp)), grafColour, typePoint ,m_GraphPointWidth); dc.DrawText (head_name, x_end+4+4+m_GraphPointWidth, y_start+2+wxCoord(((double)(count)+0.5)*1.1*(double)(h_temp))); - dc.SetTextForeground (tempColour1); + dc.SetTextForeground (*wxBLACK); } dc.SetFont(m_font_stdandart); }; @@ -246,6 +246,8 @@ void CPaintStatistics::DrawLegend(wxPaintDC &dc, PROJECTS * &proj, CMainDocument //----Draw graph---- void CPaintStatistics::DrawGraph(wxPaintDC &dc, std::vector::const_iterator &i, const wxCoord x_start, const wxCoord x_end, const wxCoord y_start, const wxCoord y_end, const wxColour grafColour, const wxInt32 typePoint, const wxInt32 m_SelectedStatistic, const double max_val_y, const double min_val_y, const double max_val_x, const double min_val_x) { + dc.SetClippingRegion(x_start-4, y_start-4, x_end-x_start+8, y_end-y_start+8); + const double yscale=(y_end-y_start)/(max_val_y-min_val_y); const double xscale=(x_end-x_start)/(max_val_x-min_val_x); @@ -278,11 +280,15 @@ void CPaintStatistics::DrawGraph(wxPaintDC &dc, std::vector::const_ite last_y=ypos; } if (last_y!=0) myDrawPoint(dc, last_x, last_y, grafColour, typePoint ,m_GraphPointWidth); + + dc.DestroyClippingRegion(); } //----Draw background, axis(lines), text(01-Jan-1980)---- void CPaintStatistics::DrawAxis(wxPaintDC &dc, const double max_val_y, const double min_val_y, const double max_val_x, const double min_val_x, wxCoord &x_start, wxCoord &x_end, wxCoord &y_start, wxCoord &y_end) { + dc.SetClippingRegion(x_start, y_start, x_end-x_start, y_end-y_start); + dc.SetBrush(wxBrush(m_brushAxisColour , wxSOLID)); dc.SetPen(wxPen(m_penAxisColour , 1 , wxSOLID)); @@ -318,20 +324,39 @@ void CPaintStatistics::DrawAxis(wxPaintDC &dc, const double max_val_y, const dou if (x_end9) d_oy_count=9; - if (d_oy_count<1) d_oy_count=1; + d_oy_count=(wxInt32)ceil((y_end-y_start)/(2.0*h_temp)); + +// if (d_oy_count>9) d_oy_count=9; +// if (d_oy_count<1) d_oy_count=1; + + double d_oy_val=fabs((max_val_y-min_val_y)/d_oy_count); + double d2=pow(10 , floor(log10(d_oy_val))); + + if (d2>=d_oy_val){ + d_oy_val=1*d2; + } else if (2*d2>=d_oy_val){ + d_oy_val=2*d2; + } else if (5*d2>=d_oy_val){ + d_oy_val=5*d2; + } else { + d_oy_val=10*d2; + } - double d_oy=(double)(y_end-y_start)/d_oy_count; - double d_oy_val=(double)(max_val_y-min_val_y)/d_oy_count; + double y_start_val=ceil(min_val_y/d_oy_val)*d_oy_val; for (double ny=0; ny<=d_oy_count;++ny){ - dc.GetTextExtent(wxString::Format(wxT("%.1f"), min_val_y+ny*d_oy_val), &w_temp, &h_temp, &des_temp, &lead_temp); - dc.DrawText(wxString::Format(wxT("%.1f"), min_val_y+ny*d_oy_val),(wxCoord)(x_start-w_temp-2-d_x),(wxCoord)(y_end-ny*d_oy-h_temp/2.0)); - dc.DrawLine((wxCoord)(x_start-d_x+1),(wxCoord)(y_end-ny*d_oy),(wxCoord)(x_end+d_x),(wxCoord)(y_end-ny*d_oy)); + dc.GetTextExtent(wxString::Format(wxT("%.1f"), y_start_val+ny*d_oy_val), &w_temp, &h_temp, &des_temp, &lead_temp); + if ((y_end - yscale * (y_start_val + ny * d_oy_val - min_val_y))>=(y_start-1)){ + dc.DrawText(wxString::Format(wxT("%.1f"), y_start_val+ny*d_oy_val),(wxCoord)(x_start-w_temp-2-d_x),(wxCoord)(y_end - yscale * (y_start_val + ny * d_oy_val - min_val_y) - h_temp/2.0)); + dc.DrawLine((wxCoord)(x_start-d_x+1),(wxCoord)(y_end - yscale * (y_start_val + ny * d_oy_val - min_val_y)),(wxCoord)(x_end+d_x),(wxCoord)(y_end - yscale * (y_start_val + ny * d_oy_val - min_val_y))); + } } //Draw day numbers and lines marking the days @@ -341,19 +366,22 @@ void CPaintStatistics::DrawAxis(wxPaintDC &dc, const double max_val_y, const dou wxInt32 d_ox_count=1; d_ox_count=(wxInt32)((x_end-x_start)/(1.2*w_temp)); - if (d_ox_count>9) d_ox_count=9; - if (d_ox_count<1) d_ox_count=1; - double d_ox=(double)(x_end-x_start)/d_ox_count; - double d_ox_val=(double)(max_val_x-min_val_x)/d_ox_count; + double d_ox_val=ceil(((double)(max_val_x-min_val_x)/d_ox_count)/86400.0)*86400.0; + d_ox_count=(wxInt32)ceil((max_val_x-min_val_x)/d_ox_val); + double x_start_val=ceil(min_val_x/86400.0)*86400.0; + for (double nx=0; nx<=d_ox_count;++nx){ - dtTemp1.Set((time_t)(min_val_x+nx*d_ox_val)); + dtTemp1.Set((time_t)(x_start_val+nx*d_ox_val)); strBuffer1=dtTemp1.Format(wxT("%d.%b.%y")); dc.GetTextExtent(strBuffer1, &w_temp, &h_temp, &des_temp, &lead_temp); - dc.DrawText(strBuffer1, (wxCoord)(x_start-w_temp/2.0+nx*d_ox), (wxCoord)(y_end+d_y)); - dc.DrawLine((wxCoord)(x_start+nx*d_ox),(wxCoord)(y_start-d_y+1), (wxCoord)(x_start+nx*d_ox),(wxCoord)(y_end+d_y)); + if ((x_start + xscale * (x_start_val + nx * d_ox_val - min_val_x))<=(x_end+1)){ + dc.DrawText(strBuffer1, (wxCoord)(x_start-w_temp/2.0 + (xscale * (x_start_val + nx * d_ox_val - min_val_x))), (wxCoord)(y_end+d_y)); + dc.DrawLine((wxCoord)(x_start + xscale * (x_start_val + nx * d_ox_val - min_val_x)),(wxCoord)(y_start-d_y+1), (wxCoord)(x_start + xscale * (x_start_val + nx * d_ox_val - min_val_x)),(wxCoord)(y_end+d_y)); + } } + dc.DestroyClippingRegion(); } void CPaintStatistics::OnPaint(wxPaintEvent& WXUNUSED(event)) { @@ -375,8 +403,9 @@ void CPaintStatistics::OnPaint(wxPaintEvent& WXUNUSED(event)) { GetClientSize(&width, &height); dc.SetBackground(*wxWHITE_BRUSH); - - dc.SetTextForeground (GetForegroundColour ()); + +// dc.SetTextForeground (GetForegroundColour ()); + dc.SetTextForeground (*wxBLACK); dc.SetTextBackground (GetBackgroundColour ()); m_font_stdandart=dc.GetFont(); @@ -441,6 +470,8 @@ void CPaintStatistics::OnPaint(wxPaintEvent& WXUNUSED(event)) { MinMaxDayCredit(i, min_val_y,max_val_y,min_val_x, max_val_x, m_SelectedStatistic); CheckMinMaxD(min_val_x, max_val_x); CheckMinMaxD(min_val_y, max_val_y); + min_val_x=floor(min_val_x/86400.0)*86400.0; + max_val_x=ceil(max_val_x/86400.0)*86400.0; //Where do we draw in? wxCoord x_start=0, y_start=0, x_end=0, y_end=0; x_start=(wxCoord)(rectangle_x_start+x_fac*(double)(col-1)); @@ -506,6 +537,8 @@ void CPaintStatistics::OnPaint(wxPaintEvent& WXUNUSED(event)) { CheckMinMaxD(min_val_x, max_val_x); CheckMinMaxD(min_val_y, max_val_y); + min_val_x=floor(min_val_x/86400.0)*86400.0; + max_val_x=ceil(max_val_x/86400.0)*86400.0; ///Draw axis + Draw Project name PROJECT* statistic = wxGetApp().GetDocument()->statistic(count); PROJECT* state_project = NULL; @@ -556,6 +589,8 @@ void CPaintStatistics::OnPaint(wxPaintEvent& WXUNUSED(event)) { } CheckMinMaxD(min_val_x, max_val_x); CheckMinMaxD(min_val_y, max_val_y); + min_val_x=floor(min_val_x/86400.0)*86400.0; + max_val_x=ceil(max_val_x/86400.0)*86400.0; ///Draw axis CheckMinMaxC(rectangle_x_start, rectangle_x_end); CheckMinMaxC(rectangle_y_start, rectangle_y_end);