forked from aseprite/aseprite
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbutton.h
More file actions
109 lines (83 loc) · 2.44 KB
/
button.h
File metadata and controls
109 lines (83 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Aseprite UI Library
// Copyright (C) 2001-2016 David Capello
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.
#ifndef UI_BUTTON_H_INCLUDED
#define UI_BUTTON_H_INCLUDED
#pragma once
#include "obs/signal.h"
#include "ui/widget.h"
#include <vector>
namespace she {
class Surface;
}
namespace ui {
class Event;
class IButtonIcon {
public:
virtual ~IButtonIcon() { }
virtual void destroy() = 0;
virtual gfx::Size size() = 0;
virtual she::Surface* normalIcon() = 0;
virtual she::Surface* selectedIcon() = 0;
virtual she::Surface* disabledIcon() = 0;
virtual int iconAlign() = 0;
};
// Generic button
class ButtonBase : public Widget {
public:
ButtonBase(const std::string& text,
WidgetType type,
WidgetType behaviorType,
WidgetType drawType);
virtual ~ButtonBase();
WidgetType behaviorType() const;
WidgetType drawType() const;
// Sets the interface used to get icons for the button depending its
// state. This interface is deleted automatically in the ButtonBase dtor.
void setIconInterface(IButtonIcon* iconInterface);
// Used by the current theme to draw the button icon.
IButtonIcon* iconInterface() const { return m_iconInterface; }
// Signals
obs::signal<void(Event&)> Click;
protected:
// Events
bool onProcessMessage(Message* msg) override;
void onSizeHint(SizeHintEvent& ev) override;
void onPaint(PaintEvent& ev) override;
// New events
virtual void onClick(Event& ev);
private:
void generateButtonSelectSignal();
bool m_pressedStatus;
WidgetType m_behaviorType;
WidgetType m_drawType;
IButtonIcon* m_iconInterface;
protected:
bool m_handleSelect;
};
// Pushable button to execute commands
class Button : public ButtonBase {
public:
Button(const std::string& text);
};
// Check boxes
class CheckBox : public ButtonBase {
public:
CheckBox(const std::string& text, WidgetType drawType = kCheckWidget);
};
// Radio buttons
class RadioButton : public ButtonBase {
public:
RadioButton(const std::string& text, int radioGroup, WidgetType drawType = kRadioWidget);
int getRadioGroup() const;
void setRadioGroup(int radioGroup);
void deselectRadioGroup();
protected:
void onSelect(bool selected) override;
private:
int m_radioGroup;
};
} // namespace ui
#endif