From ea3e8f16f0805ee3fc6110aeb427b5f232d92d53 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Tue, 20 Feb 2018 01:40:14 +0000 Subject: [PATCH 6/6] Added error and warning badges to HTML report panel. MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------2.14.3 (Apple Git-98)" This is a multi-part message in MIME format. --------------2.14.3 (Apple Git-98) Content-Type: text/plain; charset=UTF-8; format=fixed Content-Transfer-Encoding: 8bit Fixes: lp:1669020 * https://bugs.launchpad.net/kicad/+bug/1669020 --- common/dialogs/wx_html_report_panel.cpp | 94 ++++++++++++- common/dialogs/wx_html_report_panel.h | 1 + common/dialogs/wx_html_report_panel_base.cpp | 26 ++-- common/dialogs/wx_html_report_panel_base.fbp | 190 +++++++++++++++++++++++++-- common/dialogs/wx_html_report_panel_base.h | 10 +- 5 files changed, 287 insertions(+), 34 deletions(-) --------------2.14.3 (Apple Git-98) Content-Type: text/x-patch; name="0006-Added-error-and-warning-badges-to-HTML-report-panel.patch" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="0006-Added-error-and-warning-badges-to-HTML-report-panel.patch" diff --git a/common/dialogs/wx_html_report_panel.cpp b/common/dialogs/wx_html_report_panel.cpp index 9823a1e21..0c3549fcc 100644 --- a/common/dialogs/wx_html_report_panel.cpp +++ b/common/dialogs/wx_html_report_panel.cpp @@ -22,6 +22,7 @@ #include "wx_html_report_panel.h" #include +#include WX_HTML_REPORT_PANEL::WX_HTML_REPORT_PANEL( wxWindow* parent, @@ -96,6 +97,95 @@ void WX_HTML_REPORT_PANEL::scrollToBottom() m_htmlView->GetVirtualSize( &x, &y ); m_htmlView->GetScrollPixelsPerUnit( &xUnit, &yUnit ); m_htmlView->Scroll( 0, y / yUnit ); + + updateBadges(); +} + + +const static wxSize BADGE_SIZE_DU( 9, 9 ); +const static int BADGE_FONT_SIZE = 9; + +static wxBitmap makeBadge( REPORTER::SEVERITY aStyle, int aCount, wxWindow *aWindow ) +{ + wxSize size( aWindow->ConvertDialogToPixels( BADGE_SIZE_DU ) ); + wxBitmap bitmap( size ); + wxBrush brush; + wxMemoryDC badgeDC; + wxColour badgeColour; + wxColour textColour; + int fontSize = BADGE_FONT_SIZE; + + if( aCount > 99 ) + fontSize--; + + badgeDC.SelectObject( bitmap ); + + brush.SetStyle( wxBRUSHSTYLE_SOLID ); + // We're one level deep in staticBoxes; each level is darkened by 210 + brush.SetColour( aWindow->GetParent()->GetBackgroundColour().MakeDisabled( 210 ) ); + badgeDC.SetBackground( brush ); + badgeDC.Clear(); + + switch( aStyle ) + { + case REPORTER::RPT_ERROR: + badgeColour = *wxRED; + textColour = *wxWHITE; + break; + case REPORTER::RPT_WARNING: + badgeColour = *wxYELLOW; + textColour = *wxBLACK; + break; + case REPORTER::RPT_ACTION: + badgeColour = *wxGREEN; + textColour = *wxWHITE; + break; + case REPORTER::RPT_INFO: + default: + badgeColour = *wxLIGHT_GREY; + textColour = *wxBLACK; + break; + } + + brush.SetStyle( wxBRUSHSTYLE_SOLID ); + brush.SetColour( badgeColour ); + badgeDC.SetBrush( brush ); + badgeDC.SetPen( wxPen( badgeColour, 0 ) ); + badgeDC.DrawCircle( size.x / 2 - 1, size.y / 2, ( std::max( size.x, size.y ) / 2 ) - 1 ); + + wxFont font( BADGE_FONT_SIZE, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD ); + wxString text = wxString::Format( wxT( "%d" ), aCount ); + wxSize textExtent = badgeDC.GetTextExtent( text ); + + badgeDC.SetFont( font ); + badgeDC.SetTextForeground( textColour ); + badgeDC.DrawText( text, size.x / 2 - textExtent.x / 2, size.y / 2 - textExtent.y / 2 + 2 ); + + return bitmap; +} + + +void WX_HTML_REPORT_PANEL::updateBadges() +{ + int count = Count( REPORTER::RPT_ERROR ); + + if( count > 0 ) + { + m_errorsBadge->SetBitmap( makeBadge( REPORTER::RPT_ERROR, count, m_errorsBadge ) ); + m_errorsBadge->Show( true ); + } + else + m_errorsBadge->Show( false ); + + count = Count( REPORTER::RPT_WARNING ); + + if( count > 0 ) + { + m_warningsBadge->SetBitmap( makeBadge( REPORTER::RPT_WARNING, count, m_errorsBadge ) ); + m_errorsBadge->Show( true ); + } + else + m_warningsBadge->Show( false ); } @@ -201,13 +291,9 @@ void WX_HTML_REPORT_PANEL::onCheckBoxShowAll( wxCommandEvent& event ) void WX_HTML_REPORT_PANEL::syncCheckboxes() { m_checkBoxShowAll->SetValue( m_showAll ); - m_checkBoxShowWarnings->Enable( !m_showAll ); m_checkBoxShowWarnings->SetValue( m_severities & REPORTER::RPT_WARNING ); - m_checkBoxShowErrors->Enable( !m_showAll ); m_checkBoxShowErrors->SetValue( m_severities & REPORTER::RPT_ERROR ); - m_checkBoxShowInfos->Enable( !m_showAll ); m_checkBoxShowInfos->SetValue( m_severities & REPORTER::RPT_INFO ); - m_checkBoxShowActions->Enable( !m_showAll ); m_checkBoxShowActions->SetValue( m_severities & REPORTER::RPT_ACTION ); } diff --git a/common/dialogs/wx_html_report_panel.h b/common/dialogs/wx_html_report_panel.h index 7a00b5fc4..fa1dfb870 100644 --- a/common/dialogs/wx_html_report_panel.h +++ b/common/dialogs/wx_html_report_panel.h @@ -92,6 +92,7 @@ private: wxString addHeader( const wxString& aBody ); wxString generateHtml( const REPORT_LINE& aLine ); wxString generatePlainText( const REPORT_LINE& aLine ); + void updateBadges(); void refreshView(); void scrollToBottom(); diff --git a/common/dialogs/wx_html_report_panel_base.cpp b/common/dialogs/wx_html_report_panel_base.cpp index acf9eb9be..ebbf7e384 100644 --- a/common/dialogs/wx_html_report_panel_base.cpp +++ b/common/dialogs/wx_html_report_panel_base.cpp @@ -26,8 +26,8 @@ WX_HTML_REPORT_PANEL_BASE::WX_HTML_REPORT_PANEL_BASE( wxWindow* parent, wxWindow m_fgSizer->Add( m_htmlView, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 2 ); wxFlexGridSizer* fgSizer3; - fgSizer3 = new wxFlexGridSizer( 1, 7, 0, 0 ); - fgSizer3->AddGrowableCol( 6 ); + fgSizer3 = new wxFlexGridSizer( 1, 9, 0, 0 ); + fgSizer3->AddGrowableCol( 8 ); fgSizer3->SetFlexibleDirection( wxBOTH ); fgSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); @@ -39,24 +39,22 @@ WX_HTML_REPORT_PANEL_BASE::WX_HTML_REPORT_PANEL_BASE( wxWindow* parent, wxWindow m_checkBoxShowAll->SetValue(true); fgSizer3->Add( m_checkBoxShowAll, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 ); - m_checkBoxShowWarnings = new wxCheckBox( m_box->GetStaticBox(), wxID_ANY, _("Warnings"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxShowWarnings->Enable( false ); + m_checkBoxShowErrors = new wxCheckBox( m_box->GetStaticBox(), wxID_ANY, _("Errors"), wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer3->Add( m_checkBoxShowErrors, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 ); - fgSizer3->Add( m_checkBoxShowWarnings, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 ); + m_errorsBadge = new wxStaticBitmap( m_box->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer3->Add( m_errorsBadge, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - m_checkBoxShowErrors = new wxCheckBox( m_box->GetStaticBox(), wxID_ANY, _("Errors"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxShowErrors->Enable( false ); + m_checkBoxShowWarnings = new wxCheckBox( m_box->GetStaticBox(), wxID_ANY, _("Warnings"), wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer3->Add( m_checkBoxShowWarnings, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 ); - fgSizer3->Add( m_checkBoxShowErrors, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 ); + m_warningsBadge = new wxStaticBitmap( m_box->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer3->Add( m_warningsBadge, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); m_checkBoxShowInfos = new wxCheckBox( m_box->GetStaticBox(), wxID_ANY, _("Infos"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxShowInfos->Enable( false ); - fgSizer3->Add( m_checkBoxShowInfos, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 ); m_checkBoxShowActions = new wxCheckBox( m_box->GetStaticBox(), wxID_ANY, _("Actions"), wxDefaultPosition, wxDefaultSize, 0 ); - m_checkBoxShowActions->Enable( false ); - fgSizer3->Add( m_checkBoxShowActions, 0, wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); m_btnSaveReportToFile = new wxButton( m_box->GetStaticBox(), wxID_ANY, _("Save Report File"), wxDefaultPosition, wxDefaultSize, 0 ); @@ -75,8 +73,8 @@ WX_HTML_REPORT_PANEL_BASE::WX_HTML_REPORT_PANEL_BASE( wxWindow* parent, wxWindow // Connect Events m_checkBoxShowAll->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowAll ), NULL, this ); - m_checkBoxShowWarnings->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowWarnings ), NULL, this ); m_checkBoxShowErrors->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowErrors ), NULL, this ); + m_checkBoxShowWarnings->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowWarnings ), NULL, this ); m_checkBoxShowInfos->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowInfos ), NULL, this ); m_checkBoxShowActions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowActions ), NULL, this ); m_btnSaveReportToFile->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onBtnSaveToFile ), NULL, this ); @@ -86,8 +84,8 @@ WX_HTML_REPORT_PANEL_BASE::~WX_HTML_REPORT_PANEL_BASE() { // Disconnect Events m_checkBoxShowAll->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowAll ), NULL, this ); - m_checkBoxShowWarnings->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowWarnings ), NULL, this ); m_checkBoxShowErrors->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowErrors ), NULL, this ); + m_checkBoxShowWarnings->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowWarnings ), NULL, this ); m_checkBoxShowInfos->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowInfos ), NULL, this ); m_checkBoxShowActions->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowActions ), NULL, this ); m_btnSaveReportToFile->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onBtnSaveToFile ), NULL, this ); diff --git a/common/dialogs/wx_html_report_panel_base.fbp b/common/dialogs/wx_html_report_panel_base.fbp index abdf17dc1..59414acee 100644 --- a/common/dialogs/wx_html_report_panel_base.fbp +++ b/common/dialogs/wx_html_report_panel_base.fbp @@ -192,9 +192,9 @@ wxEXPAND 1 - 7 + 9 wxBOTH - 6 + 8 0 @@ -376,7 +376,7 @@ 5 - wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP 0 1 @@ -400,14 +400,14 @@ Dock 0 Left - 0 + 1 1 0 0 wxID_ANY - Warnings + Errors 0 @@ -415,7 +415,7 @@ 0 1 - m_checkBoxShowWarnings + m_checkBoxShowErrors 1 @@ -437,7 +437,88 @@ - onCheckBoxShowWarnings + onCheckBoxShowErrors + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_errorsBadge + 1 + + + protected + 1 + + Resizable + 1 + + ; forward_declare + 0 + + + + + @@ -464,7 +545,7 @@ 5 - wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP 0 1 @@ -488,14 +569,14 @@ Dock 0 Left - 0 + 1 1 0 0 wxID_ANY - Errors + Warnings 0 @@ -503,7 +584,7 @@ 0 1 - m_checkBoxShowErrors + m_checkBoxShowWarnings 1 @@ -525,7 +606,88 @@ - onCheckBoxShowErrors + onCheckBoxShowWarnings + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_warningsBadge + 1 + + + protected + 1 + + Resizable + 1 + + ; forward_declare + 0 + + + + + @@ -576,7 +738,7 @@ Dock 0 Left - 0 + 1 1 @@ -664,7 +826,7 @@ Dock 0 Left - 0 + 1 1 diff --git a/common/dialogs/wx_html_report_panel_base.h b/common/dialogs/wx_html_report_panel_base.h index f2a434c18..42d5b82bd 100644 --- a/common/dialogs/wx_html_report_panel_base.h +++ b/common/dialogs/wx_html_report_panel_base.h @@ -19,6 +19,10 @@ #include #include #include +#include +#include +#include +#include #include #include #include @@ -40,16 +44,18 @@ class WX_HTML_REPORT_PANEL_BASE : public wxPanel wxHtmlWindow* m_htmlView; wxStaticText* m_staticText3; wxCheckBox* m_checkBoxShowAll; - wxCheckBox* m_checkBoxShowWarnings; wxCheckBox* m_checkBoxShowErrors; + wxStaticBitmap* m_errorsBadge; + wxCheckBox* m_checkBoxShowWarnings; + wxStaticBitmap* m_warningsBadge; wxCheckBox* m_checkBoxShowInfos; wxCheckBox* m_checkBoxShowActions; wxButton* m_btnSaveReportToFile; // Virtual event handlers, overide them in your derived class virtual void onCheckBoxShowAll( wxCommandEvent& event ) { event.Skip(); } - virtual void onCheckBoxShowWarnings( wxCommandEvent& event ) { event.Skip(); } virtual void onCheckBoxShowErrors( wxCommandEvent& event ) { event.Skip(); } + virtual void onCheckBoxShowWarnings( wxCommandEvent& event ) { event.Skip(); } virtual void onCheckBoxShowInfos( wxCommandEvent& event ) { event.Skip(); } virtual void onCheckBoxShowActions( wxCommandEvent& event ) { event.Skip(); } virtual void onBtnSaveToFile( wxCommandEvent& event ) { event.Skip(); } --------------2.14.3 (Apple Git-98)--