Simple SFML GUI  0.2a
FocusAction.hpp
1 /*
2  * FocusAction.hpp
3  *
4  * Created on: 26.06.2017
5  * Author: jakub
6  */
7 
8 #ifndef SRC_FOCUSACTION_HPP_
9 #define SRC_FOCUSACTION_HPP_
10 
11 #include "HaveAction.hpp"
12 #include "HaveHover.hpp"
13 
14 namespace ActionType {
15  namespace Focus {
16  const char* const gain = "gainfocus";
17  const char* const lost = "lostfocus";
18  }
19  namespace Hover {
20  const char* const on = "onhover";
21  const char* const gain = "gainhover";
22  const char* const lost = "losthover";
23  }
24 }
25 
26 template <typename T>
27 class FocusAction :
28  public Element,
29  public HaveAction<T>,
30  public HaveHover {
31 public:
32  FocusAction() :
33  HaveHover(this->getColorProvider())
34  {}
35  virtual ~FocusAction() {}
36  virtual bool update(sf::Vector2f mp = sf::Vector2f(0.f,0.f), bool pressLeft = false, bool pressRight = false, bool aboveHover = false) {
37  bool lastHover = hover;
38 
39  if(!aboveHover && visible) {
40  updateHover(mp, this->clippedArea);
41  } else {
42  hover = false;
43  }
44 
45 
46  if(hover) {
47  if(lastHover) {
48  this->doAction(ActionType::Hover::on);
49  } else {
50  this->doAction(ActionType::Hover::gain);
51  }
52  } else {
53  if(lastHover) {
54  this->doAction(ActionType::Hover::lost);
55  }
56  }
57 
58  return hover | aboveHover;
59  }
60  virtual void onFocusGain() {
61  this->doAction(ActionType::Focus::gain);
62  }
63  virtual void onFocusLost() {
64  this->doAction(ActionType::Focus::lost);
65  }
66 
67 protected:
68 
69 };
70 
71 #endif /* SRC_FOCUSACTION_HPP_ */
Definition: HaveHover.hpp:16
Definition: Checkbox.hpp:13
Definition: HaveAction.hpp:33
Definition: Element.hpp:22
Definition: FocusAction.hpp:27