Power System Platform  2026w23a-beta
Loading...
Searching...
No Matches
ControlElementButton Class Reference

This class is responsible to handle the user interaction with control elements. More...

#include <ControlEditor.h>

Inheritance diagram for ControlElementButton:
Collaboration diagram for ControlElementButton:

Public Member Functions

 ControlElementButton (wxWindow *parent, wxString label, wxImage image, wxWindowID id, GUIColour *guiColour)
 
 ControlElementButton (wxWindow *parent, wxString label, std::unique_ptr< ControlElement > iconElement, wxWindowID id, GUIColour *guiColour, double buttonScale=1.0)
 

Protected Member Functions

virtual void OnPaint (wxPaintEvent &event)
 
virtual void OnMouseEnter (wxMouseEvent &event)
 
virtual void OnMouseLeave (wxMouseEvent &event)
 
virtual void OnLeftClickDown (wxMouseEvent &event)
 
virtual void OnLeftClickUp (wxMouseEvent &event)
 

Protected Attributes

GUIColourm_guiColour = nullptr
 
std::unique_ptr< ControlElementm_iconElement
 
wxString m_label
 
wxFont m_buttonFont
 
double m_buttonScale = 1.0
 
wxPoint m_labelPosition
 
wxImage m_image
 
wxSize m_imageSize
 
wxPoint m_imagePosition
 
int m_borderSize = 2
 
bool m_mouseAbove = false
 
bool m_selected = false
 
wxSize m_buttonSize
 

Detailed Description

This class is responsible to handle the user interaction with control elements.

Author
Thales Lima Oliveira thale.nosp@m.s@uf.nosp@m.u.br
Date
05/10/2017

Definition at line 87 of file ControlEditor.h.

Constructor & Destructor Documentation

◆ ControlElementButton() [1/2]

ControlElementButton::ControlElementButton ( wxWindow *  parent,
wxString  label,
wxImage  image,
wxWindowID  id,
GUIColour guiColour 
)

Definition at line 97 of file ControlEditor.cpp.

98 : wxWindow(parent, id), m_guiColour(guiColour)
99{
100 SetBackgroundColour(m_guiColour->background);
101 m_buttonFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
102 m_label = label;
103 m_image = image;
104 m_imageSize = wxSize(image.GetWidth(), image.GetHeight());
105
106 // Calculate label size.
107 wxScreenDC dc;
108 dc.SetFont(m_buttonFont);
109 wxSize textSize = dc.GetTextExtent(label);
110
111 int buttonWidth = 0;
112 if (textSize.GetWidth() > m_imageSize.GetWidth()) {
113 buttonWidth = textSize.GetWidth();
114 m_imagePosition = wxPoint((buttonWidth - m_imageSize.GetWidth()) / 2 + m_borderSize, m_borderSize);
115 m_labelPosition = wxPoint(m_borderSize, m_imageSize.GetHeight() + m_borderSize);
116 }
117 else {
118 buttonWidth = m_imageSize.GetWidth();
119 m_imagePosition = wxPoint(m_borderSize, m_borderSize);
120 m_labelPosition =
121 wxPoint((buttonWidth - textSize.GetWidth()) / 2 + m_borderSize, m_imageSize.GetHeight() + m_borderSize);
122 }
123 m_buttonSize =
124 wxSize(buttonWidth + 2 * m_borderSize, textSize.GetHeight() + m_imageSize.GetHeight() + 2 * m_borderSize);
125 SetMinSize(m_buttonSize + wxSize(m_borderSize, m_borderSize));
126
127 // Events.
128 Bind(wxEVT_PAINT, &ControlElementButton::OnPaint, this);
129 Bind(wxEVT_ENTER_WINDOW, &ControlElementButton::OnMouseEnter, this);
130 Bind(wxEVT_LEAVE_WINDOW, &ControlElementButton::OnMouseLeave, this);
131 Bind(wxEVT_LEFT_DOWN, &ControlElementButton::OnLeftClickDown, this);
132 Bind(wxEVT_LEFT_UP, &ControlElementButton::OnLeftClickUp, this);
133}

◆ ControlElementButton() [2/2]

ControlElementButton::ControlElementButton ( wxWindow *  parent,
wxString  label,
std::unique_ptr< ControlElement iconElement,
wxWindowID  id,
GUIColour guiColour,
double  buttonScale = 1.0 
)

Definition at line 135 of file ControlEditor.cpp.

136 :
137 wxWindow(parent, id), m_guiColour(guiColour), m_iconElement(std::move(iconElement)), m_buttonScale(buttonScale)
138{
139 SetBackgroundColour(m_guiColour->background);
140 m_buttonFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
141 //m_buttonFont.SetPointSize(static_cast<int>(m_buttonFont.GetPointSize() * (1.0 / m_buttonScale)));
142 m_label = label;
143
144 // Calculate label size.
145 wxScreenDC dc;
146 dc.SetFont(m_buttonFont);
147 //wxSize textSize = dc.GetTextExtent(label) * m_buttonScale;
148 wxSize textSize = dc.GetTextExtent(label);
149
150 m_imageSize = wxSize(static_cast<int>(m_iconElement->GetWidth()), static_cast<int>(m_iconElement->GetHeight())) * m_buttonScale;
151
152 int buttonWidth = 0;
153 if (textSize.GetWidth() > m_imageSize.GetWidth()) {
154 buttonWidth = textSize.GetWidth();
155 m_imagePosition = wxPoint((buttonWidth - m_imageSize.GetWidth()) / 2 + m_borderSize, m_borderSize);
156 m_labelPosition = wxPoint(m_borderSize, m_imageSize.GetHeight() + m_borderSize);
157 }
158 else {
159 buttonWidth = m_imageSize.GetWidth();
160 m_imagePosition = wxPoint(m_borderSize, m_borderSize);
161 m_labelPosition =
162 wxPoint((buttonWidth - textSize.GetWidth()) / 2 + m_borderSize, m_imageSize.GetHeight() + m_borderSize);
163 }
164 m_buttonSize =
165 wxSize(buttonWidth + 2 * m_borderSize, textSize.GetHeight() + m_imageSize.GetHeight() + 2 * m_borderSize);
166 SetMinSize(m_buttonSize + wxSize(m_borderSize, m_borderSize));
167
168 m_iconElement->StartMove(m_iconElement->GetPosition());
169 m_iconElement->Move(wxPoint2DDouble(m_buttonSize.GetWidth() / 2.0, (m_buttonSize.GetHeight() - textSize.GetHeight()) / 2.0));
170
171 // Events.
172 Bind(wxEVT_PAINT, &ControlElementButton::OnPaint, this);
173 Bind(wxEVT_ENTER_WINDOW, &ControlElementButton::OnMouseEnter, this);
174 Bind(wxEVT_LEAVE_WINDOW, &ControlElementButton::OnMouseLeave, this);
175 Bind(wxEVT_LEFT_DOWN, &ControlElementButton::OnLeftClickDown, this);
176 Bind(wxEVT_LEFT_UP, &ControlElementButton::OnLeftClickUp, this);
177}

◆ ~ControlElementButton()

ControlElementButton::~ControlElementButton ( )

Definition at line 179 of file ControlEditor.cpp.

179{}

Member Function Documentation

◆ OnLeftClickDown()

void ControlElementButton::OnLeftClickDown ( wxMouseEvent &  event)
protectedvirtual

Definition at line 230 of file ControlEditor.cpp.

231{
232 m_selected = true;
233 Refresh();
234 event.Skip();
235}

◆ OnLeftClickUp()

void ControlElementButton::OnLeftClickUp ( wxMouseEvent &  event)
protectedvirtual

Definition at line 237 of file ControlEditor.cpp.

238{
239 m_selected = false;
240 Refresh();
241 event.Skip();
242}

◆ OnMouseEnter()

void ControlElementButton::OnMouseEnter ( wxMouseEvent &  event)
protectedvirtual

Definition at line 216 of file ControlEditor.cpp.

217{
218 m_mouseAbove = true;
219 Refresh();
220 event.Skip();
221}

◆ OnMouseLeave()

void ControlElementButton::OnMouseLeave ( wxMouseEvent &  event)
protectedvirtual

Definition at line 223 of file ControlEditor.cpp.

224{
225 m_mouseAbove = false;
226 Refresh();
227 event.Skip();
228}

◆ OnPaint()

void ControlElementButton::OnPaint ( wxPaintEvent &  event)
protectedvirtual

Definition at line 180 of file ControlEditor.cpp.

181{
182 wxPaintDC dc(this);
183 wxGraphicsContext* gc = wxGraphicsContext::Create(dc);
184 if (gc) {
185
186 if (m_mouseAbove) {
187 if (m_selected) {
188 gc->SetPen(wxPen(m_guiColour->altSelection, m_borderSize - 1));
189 gc->SetBrush(m_guiColour->altSelection);
190 }
191 else {
192 gc->SetPen(*wxTRANSPARENT_PEN);
193 gc->SetBrush(m_guiColour->selection);
194 }
195 gc->DrawRectangle(m_borderSize / 2, m_borderSize / 2, m_buttonSize.GetWidth(), m_buttonSize.GetHeight());
196 }
197
198 gc->SetFont(m_buttonFont, m_guiColour->text);
199 gc->DrawText(m_label, m_labelPosition.x, m_labelPosition.y);
200
201 if (m_iconElement) {
202 gc->Translate(m_buttonSize.GetWidth() / 2.0, m_buttonSize.GetHeight() / 2.0);
203 gc->Scale(m_buttonScale, m_buttonScale);
204 gc->Translate(-m_buttonSize.GetWidth() / 2.0, -m_buttonSize.GetHeight() / 2.0);
205 m_iconElement->DrawDC(m_guiColour, wxPoint2DDouble(0, 0), 1.0, gc);
206 }
207 else {
208 gc->DrawBitmap(gc->CreateBitmapFromImage(m_image), m_imagePosition.x, m_imagePosition.y, m_imageSize.GetWidth(),
209 m_imageSize.GetHeight());
210 }
211
212 delete gc;
213 }
214}

Member Data Documentation

◆ m_borderSize

int ControlElementButton::m_borderSize = 2
protected

Definition at line 114 of file ControlEditor.h.

◆ m_buttonFont

wxFont ControlElementButton::m_buttonFont
protected

Definition at line 106 of file ControlEditor.h.

◆ m_buttonScale

double ControlElementButton::m_buttonScale = 1.0
protected

Definition at line 107 of file ControlEditor.h.

◆ m_buttonSize

wxSize ControlElementButton::m_buttonSize
protected

Definition at line 118 of file ControlEditor.h.

◆ m_guiColour

GUIColour* ControlElementButton::m_guiColour = nullptr
protected

Definition at line 101 of file ControlEditor.h.

◆ m_iconElement

std::unique_ptr<ControlElement> ControlElementButton::m_iconElement
protected

Definition at line 103 of file ControlEditor.h.

◆ m_image

wxImage ControlElementButton::m_image
protected

Definition at line 110 of file ControlEditor.h.

◆ m_imagePosition

wxPoint ControlElementButton::m_imagePosition
protected

Definition at line 112 of file ControlEditor.h.

◆ m_imageSize

wxSize ControlElementButton::m_imageSize
protected

Definition at line 111 of file ControlEditor.h.

◆ m_label

wxString ControlElementButton::m_label
protected

Definition at line 105 of file ControlEditor.h.

◆ m_labelPosition

wxPoint ControlElementButton::m_labelPosition
protected

Definition at line 108 of file ControlEditor.h.

◆ m_mouseAbove

bool ControlElementButton::m_mouseAbove = false
protected

Definition at line 115 of file ControlEditor.h.

◆ m_selected

bool ControlElementButton::m_selected = false
protected

Definition at line 116 of file ControlEditor.h.


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