-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMouseClickStrategy.h
executable file
·47 lines (38 loc) · 1.3 KB
/
MouseClickStrategy.h
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
#ifndef MOUSECLICKSTRATEGY_H
#define MOUSECLICKSTRATEGY_H
#include <memory>
#include "chinese_chess.h"
namespace ChineseChess
{
// абстрактный класс, которому можно "доложить" о клике
// (по-идее, если речь идет о клике на ячейку,
// этим классом должен быть виджет-родитель ячейки.
class MouseClickReporter
{
public:
virtual void onClick(int cell_id) =0;
virtual ~MouseClickReporter() {}
};
// исходная стратегия реакции на клик - игнорировать
struct MouseClickStrategy
{
typedef std::shared_ptr<MouseClickStrategy> ptr;
// принимает указатель на класс, которому нужно сообщить о клике,
// и id, который ему нужно передать (id ячейки)
virtual void onClick(MouseClickReporter * =0, int id =0) =0;
virtual ~MouseClickStrategy() {}
};
struct IgnoreMouseClick: MouseClickStrategy
{
void onClick(MouseClickReporter * =0, int=0) {}
};
struct ReportMouseClick: MouseClickStrategy
{
void onClick(MouseClickReporter *reporter =0, int id =0)
{
if(reporter != 0)
reporter->onClick(id);
}
};
}
#endif // MOUSECLICKSTRATEGY_H