KiCad PCB EDA Suite
NUMBER_BADGE Class Reference

A simple UI element that puts a number on top of a colored rounded rectangle with a fill color that shows the severity of the reports the number is counting (e.g. More...

#include <number_badge.h>

Inheritance diagram for NUMBER_BADGE:

Public Member Functions

 NUMBER_BADGE (wxWindow *aParent, wxWindowID aId, const wxPoint &aPos, const wxSize &aSize, int aStyles)
 Create a number badge with 10pt font and a maximum number of 1000. More...
 
void UpdateNumber (int aNumber, SEVERITY aSeverity)
 Update the number displayed on the badge. More...
 
void SetMaximumNumber (int aMax)
 Set the maximum number to be shown on the badge. More...
 
void SetTextSize (int aSize)
 Set the text size to use on the badge. More...
 

Protected Member Functions

void computeSize ()
 Helper function to compute the size of the badge. More...
 
void onPaint (wxPaintEvent &aEvt)
 Handler that actually paints the badge and the text. More...
 

Protected Attributes

int m_textSize
 
int m_maxNumber
 
int m_currentNumber
 
bool m_showBadge
 
wxColour m_badgeColour
 
wxColour m_textColour
 

Detailed Description

A simple UI element that puts a number on top of a colored rounded rectangle with a fill color that shows the severity of the reports the number is counting (e.g.

green, yellow, red). This badge will also automatically truncate the displayed number to the set maximum and display "+" at the end to represent it is truncated.

Definition at line 38 of file number_badge.h.

Constructor & Destructor Documentation

◆ NUMBER_BADGE()

NUMBER_BADGE::NUMBER_BADGE ( wxWindow *  aParent,
wxWindowID  aId,
const wxPoint &  aPos,
const wxSize &  aSize,
int  aStyles 
)

Create a number badge with 10pt font and a maximum number of 1000.

Definition at line 30 of file number_badge.cpp.

31 :
32 wxPanel( aParent, aId, aPos, aSize, aStyles ),
33 m_textSize( 10 ),
34 m_maxNumber( 1000 ),
35 m_currentNumber( 0 ),
36 m_showBadge( false )
37{
39 Bind( wxEVT_PAINT, &NUMBER_BADGE::onPaint, this );
40}
void computeSize()
Helper function to compute the size of the badge.
int m_currentNumber
Definition: number_badge.h:91
bool m_showBadge
Definition: number_badge.h:92
void onPaint(wxPaintEvent &aEvt)
Handler that actually paints the badge and the text.

References computeSize(), and onPaint().

Member Function Documentation

◆ computeSize()

void NUMBER_BADGE::computeSize ( )
protected

Helper function to compute the size of the badge.

Definition at line 133 of file number_badge.cpp.

134{
135 wxClientDC dc( this );
136
137 wxString test = wxString::Format( wxT( "%d" ), m_currentNumber );
138 int len = test.length();
139
140 // Determine the size using the string "m999{+}" where the 'm' on the front serves as a margin
141 // so the number isn't too close to the curved edge.
142 test = "m";
143 test.Pad( len, '9' );
144
146 test += "+";
147
148 dc.SetFont( wxFont( m_textSize, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, BADGE_FONTWEIGHT ) );
149 wxSize size = dc.GetTextExtent( test );
150
151 size.y *= PLATFORM_FUDGE_Y;
152 size.x = std::max<int>( size.x * PLATFORM_FUDGE_X, size.y );
153
154 SetMinSize( size );
155 SetSize( size );
156}
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200

References Format(), m_currentNumber, m_maxNumber, and m_textSize.

Referenced by NUMBER_BADGE(), SetTextSize(), and UpdateNumber().

◆ onPaint()

void NUMBER_BADGE::onPaint ( wxPaintEvent &  aEvt)
protected

Handler that actually paints the badge and the text.

Definition at line 159 of file number_badge.cpp.

160{
161 // The drawing rectangle
162 wxSize clientSize = GetSize();
163 wxPaintDC dc( this );
164 wxString text;
165 wxBrush brush;
166
167 // Give the badge a transparent background to show the panel underneath
168 dc.SetBackground( *wxTRANSPARENT_BRUSH );
169 dc.Clear();
170
171 // We always draw a transparent background, but only draw the badge when it is needed
172 if( !m_showBadge )
173 return;
174
175 // The rectangle the color is drawn in needs to be shrunk by 1px on each axis because for some
176 // reason it seems to be padded out by 1px and is cutoff otherwise.
177 wxRect rect( wxPoint( 0, 0 ), clientSize - wxSize( 1, 1 ) );
178
179 brush.SetStyle( wxBRUSHSTYLE_SOLID );
180 brush.SetColour( m_badgeColour );
181 dc.SetBrush( brush );
182 dc.SetPen( wxPen( m_badgeColour, 0 ) );
183 dc.DrawRoundedRectangle( rect, rect.height / 2 );
184
185 // Cap the number displayed and add the "+" to the end if required
187 text = wxString::Format( wxT( "%d+" ), m_maxNumber );
188 else
189 text = wxString::Format( wxT( "%d" ), m_currentNumber );
190
191 dc.SetFont( wxFont( m_textSize, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, BADGE_FONTWEIGHT ) );
192 dc.SetTextForeground( m_textColour );
193 dc.DrawLabel( text, wxRect( wxPoint( 0, 0 ), clientSize ), wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL );
194}
wxColour m_badgeColour
Definition: number_badge.h:93
wxColour m_textColour
Definition: number_badge.h:94

References Format(), m_badgeColour, m_currentNumber, m_maxNumber, m_showBadge, m_textColour, m_textSize, and text.

Referenced by NUMBER_BADGE().

◆ SetMaximumNumber()

void NUMBER_BADGE::SetMaximumNumber ( int  aMax)

Set the maximum number to be shown on the badge.

Any numbers greater than this will be displayed as the maximum number followed by "+".

Parameters
aMaxis the maximum number

Definition at line 100 of file number_badge.cpp.

101{
102 m_maxNumber = aMax;
103}

References m_maxNumber.

Referenced by DIALOG_ERC::DIALOG_ERC(), DIALOG_DRC::updateDisplayedCounts(), and DIALOG_FOOTPRINT_CHECKER::updateDisplayedCounts().

◆ SetTextSize()

void NUMBER_BADGE::SetTextSize ( int  aSize)

Set the text size to use on the badge.

Parameters
aSizeis the text size (in pt) to use on the badge

Definition at line 106 of file number_badge.cpp.

107{
108 m_textSize = aSize;
109 computeSize();
110}

References computeSize(), and m_textSize.

◆ UpdateNumber()

void NUMBER_BADGE::UpdateNumber ( int  aNumber,
SEVERITY  aSeverity 
)

Update the number displayed on the badge.

Severity to badge color mapping:

  • RPT_SEVERITY_ERROR = red badge
  • RPT_SEVERITY_WARNING = yellow badge
  • RPT_SEVERITY_ACTION = green badge
  • RPT_SEVERITY_EXCLUSION = light grey badge
  • RPT_SEVERITY_INFO = light grey badge
Parameters
aNumberis the new number to display.
aSeverityis the new severity of the badge.

Definition at line 43 of file number_badge.cpp.

44{
45 m_showBadge = true;
46 m_currentNumber = aNumber;
47
48 // Choose the colors of the badge rectangle and font
49 if( aNumber < 0 )
50 {
51 m_showBadge = false;
52 }
53 else if( aNumber == 0 )
54 {
55 if( aSeverity == RPT_SEVERITY_ERROR || aSeverity == RPT_SEVERITY_WARNING )
56 {
57 m_badgeColour = KIGFX::COLOR4D( GREEN ).ToColour();
58 m_textColour = *wxWHITE;
59 }
60 else
61 {
62 m_showBadge = false;
63 }
64 }
65 else
66 {
67 switch( aSeverity )
68 {
70 m_badgeColour = KIPLATFORM::UI::IsDarkTheme() ? wxColour( 240, 64, 64 ) : *wxRED;
71 m_textColour = *wxWHITE;
72 break;
73
75 m_badgeColour = *wxYELLOW;
76 m_textColour = *wxBLACK;
77 break;
78
80 m_badgeColour = KIGFX::COLOR4D( GREEN ).ToColour();
81 m_textColour = *wxWHITE;
82 break;
83
86 default:
87 m_badgeColour = *wxLIGHT_GREY;
88 m_textColour = *wxBLACK;
89 break;
90 }
91 }
92
94
95 // Force the badge UI to refresh so the new number and color is displayed
96 Refresh();
97}
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
@ GREEN
Definition: color4d.h:57
bool IsDarkTheme()
Determine if the desktop interface is currently using a dark theme or a light theme.
Definition: gtk/ui.cpp:31
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
@ RPT_SEVERITY_WARNING
@ RPT_SEVERITY_ERROR
@ RPT_SEVERITY_EXCLUSION
@ RPT_SEVERITY_INFO
@ RPT_SEVERITY_ACTION

References computeSize(), GREEN, KIPLATFORM::UI::IsDarkTheme(), m_badgeColour, m_currentNumber, m_showBadge, m_textColour, Refresh(), RPT_SEVERITY_ACTION, RPT_SEVERITY_ERROR, RPT_SEVERITY_EXCLUSION, RPT_SEVERITY_INFO, and RPT_SEVERITY_WARNING.

Referenced by WX_HTML_REPORT_PANEL::updateBadges(), DIALOG_ERC::updateDisplayedCounts(), DIALOG_DRC::updateDisplayedCounts(), and DIALOG_FOOTPRINT_CHECKER::updateDisplayedCounts().

Member Data Documentation

◆ m_badgeColour

wxColour NUMBER_BADGE::m_badgeColour
protected

Definition at line 93 of file number_badge.h.

Referenced by onPaint(), and UpdateNumber().

◆ m_currentNumber

int NUMBER_BADGE::m_currentNumber
protected

Definition at line 91 of file number_badge.h.

Referenced by computeSize(), onPaint(), and UpdateNumber().

◆ m_maxNumber

int NUMBER_BADGE::m_maxNumber
protected

Definition at line 89 of file number_badge.h.

Referenced by computeSize(), onPaint(), and SetMaximumNumber().

◆ m_showBadge

bool NUMBER_BADGE::m_showBadge
protected

Definition at line 92 of file number_badge.h.

Referenced by onPaint(), and UpdateNumber().

◆ m_textColour

wxColour NUMBER_BADGE::m_textColour
protected

Definition at line 94 of file number_badge.h.

Referenced by onPaint(), and UpdateNumber().

◆ m_textSize

int NUMBER_BADGE::m_textSize
protected

Definition at line 88 of file number_badge.h.

Referenced by computeSize(), onPaint(), and SetTextSize().


The documentation for this class was generated from the following files: