Try out a signal-like system like this:

auto* b = new Button;
b->onClick = [] (Button&) {
    printf("The button was clicked!\n");
};
This commit is contained in:
Andreas Kling 2018-10-13 23:01:06 +02:00
parent a3fb19fe9c
commit 7a0a7abc52
Notes: sideshowbarker 2024-07-19 18:48:45 +09:00
4 changed files with 10 additions and 0 deletions

View file

@ -87,5 +87,8 @@ void Button::mouseUpEvent(MouseEvent& event)
update();
Widget::mouseUpEvent(event);
if (onClick)
onClick(*this);
}

View file

@ -11,6 +11,8 @@ public:
String caption() const { return m_caption; }
void setCaption(String&&);
std::function<void(Button&)> onClick;
private:
virtual void paintEvent(PaintEvent&) override;
virtual void mouseDownEvent(MouseEvent&) override;

View file

@ -5,6 +5,7 @@
#include "Rect.h"
#include "Color.h"
#include <AK/String.h>
#include <functional>
class Window;

View file

@ -63,6 +63,10 @@ int main(int argc, char** argv)
b->setWindowRelativeRect({ 0, 20, 100, 20 });
b->setCaption("Button");
b->onClick = [] (Button& button) {
printf("Button %p clicked!\n", &button);
};
auto* c = new CheckBox(widgetTestWindowWidget);
c->setWindowRelativeRect({ 0, 40, 100, 20 });
c->setCaption("CheckBox");