Simple GUI Library
context_menu.h
Go to the documentation of this file.
1/**
2 * @author Nikita Mochalov (github.com/tralf-strues)
3 * @file context_menu.h
4 * @date 2021-11-10
5 *
6 * @copyright Copyright (c) 2021
7 */
8
9#pragma once
10
11#include "box_container.h"
12#include "../controls/button.h"
13
14namespace Sgl
15{
16 class Scene;
17 class Button;
18
19 class MenuItem : public Button
20 {
21 public:
22 MenuItem(const char* label);
23
24 void setOnAction(ActionListener<MenuItem>* listener);
25
26 private:
27 void setOnAction(ActionListener<Button>* listener);
28 };
29
30 class ContextMenu : public VBox
31 {
32 public:
33 static const Insets DEFAULT_PADDING;
34 static const Border DEFAULT_BORDER;
35 static const ColorFill DEFAULT_BACKGROUND_FILL;
36 static const Background DEFAULT_BACKGROUND;
37 static const ShadowSpecification DEFAULT_SHADOW;
38
39 public:
40 ContextMenu(Scene* scene, Component* sourceComponent = nullptr);
41 virtual ~ContextMenu() override;
42
43 virtual void render(const Sml::Rectangle<int32_t>& targetRegion) override;
44
45 Component* getSource();
46 void setSource(Component* source);
47
48 bool isAutoHide() const;
49 void setAutoHide(bool autoHide);
50
51 void show();
52 void hide();
53
54 private:
55 Component* m_Source = nullptr;
56 bool m_AutoHide = true;
57 };
58}