aboutsummaryrefslogtreecommitdiff
path: root/src/components/Menu.cpp
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-02-12 19:13:34 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2022-02-12 19:13:34 +0100
commita359219e33fdf3afb5ddfbb084563054a947b106 (patch)
tree91dab9c21321f73152993183cd6e8cf4a04017f8 /src/components/Menu.cpp
Create project
Diffstat (limited to 'src/components/Menu.cpp')
-rw-r--r--src/components/Menu.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/components/Menu.cpp b/src/components/Menu.cpp
new file mode 100644
index 0000000..36d1d1a
--- /dev/null
+++ b/src/components/Menu.cpp
@@ -0,0 +1,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 \ No newline at end of file