aboutsummaryrefslogtreecommitdiff
path: root/src/components/Menu.cpp
blob: 36d1d1a5ba569544153e3a580b754e9d3151d9ce (plain)
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
#include "Menu.hpp"

namespace cgeditor {

Menu::Menu(Status *s) : Component(s), WasOpen(false) {
  entries.push_back("Delete from here");
  entries.push_back("Promote");
  entries.push_back("Set as main line");
}
void Menu::Refresh() {
  if (WasOpen && (status->LeftClick || status->RightClick)) {
    char i = 0;
    for (Element &e : elements) {
      if (e.IsOver(status->MouseX, status->MouseY)) {
        if (i == 0) {
          status->Events.push_back({Event::Type::Delete,status->SelectedMove});
        } else if (i == 1) {
          status->Events.push_back({Event::Type::Promote,status->SelectedMove});
        } else if (i == 2) {
          status->Events.push_back({Event::Type::SetAsMainline,status->SelectedMove});
        }
      }
      i++;
    }
    status->IsMenuOpen = false;
    WasOpen = false;
    elements.clear();
    return;
  }

  elements.clear();
  // Draw menu backward to avoid getting out of the canvas
  bool backwardY =
      (status->MouseY + status->MenuItemHeight * entries.size()) >=
      status->CanvasHeight;
  bool backwardX =
      (status->MouseX + status->MenuItemWidth) >= status->CanvasWidth;

  if (status->IsMenuOpen) {
    char i = 0;
    for (std::string &en : entries) {
      Element e;
      e.prop=Property::Text|Property::Menuitem;
      e.text = en;
      if (backwardX) {
        e.x = (status->MouseX - status->MenuItemWidth);
      } else {
        e.x = status->MouseX;
      }
      if (backwardY) {
        e.y = (status->MouseY - status->MenuItemHeight) -
              i * status->MenuItemHeight;
      } else {
        e.y = status->MouseY + i * status->MenuItemHeight;
      }
      e.width = status->MenuItemWidth;
      e.height = status->MenuItemHeight;
      elements.push_back(e);
      i++;
    }
    WasOpen = true;
  }
}
} // namespace cgeditor